All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.upokecenter.mail.HeaderParser Maven / Gradle / Ivy

The newest version!
package com.upokecenter.mail;

  final class HeaderParser {
private HeaderParser() {
}
    public static int ParseAddrSpec(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseLocalPart(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 64)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseDomain(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseAddress(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseMailbox(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseGroup(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseAddressList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        indexTemp4, state, state2, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        tx2 = ParseAddress(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            do {
              indexTemp3 = index;
              do {
                indexTemp4 = ParseAddress(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                indexTemp4 = ParseCFWS(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                break;
              }
            } while (false);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseAngleAddr(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 60)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseObsRoute(str, index, endIndex, tokener);
        tx2 = ParseAddrSpec(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 62)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseAtext(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 33) || (str.charAt(index) == 35) ||
          (str.charAt(index) == 36) || (str.charAt(index) == 37) || (str.charAt(index) == 38) ||
          (str.charAt(index) == 39) || (str.charAt(index) == 42) || (str.charAt(index) == 43) ||
          (str.charAt(index) == 45) || (str.charAt(index) == 47) || (str.charAt(index) == 61) ||
          (str.charAt(index) == 63) || (str.charAt(index) == 94) || (str.charAt(index) == 95) ||
          (str.charAt(index) == 96) || (str.charAt(index) == 123) || (str.charAt(index) == 124) ||
          (str.charAt(index) == 125) || (str.charAt(index) == 126) || (str.charAt(index) >=
          128 && str.charAt(index) <= 55295) || (str.charAt(index) >= 57344 && str.charAt(index)
          <= 65535))) {
          ++indexTemp; break;
        }
        if (index + 1 < endIndex && ((str.charAt(index) >= 55296 && str.charAt(index) <=
          56319) && (str.charAt(index + 1) >= 56320 && str.charAt(index + 1) <= 57343))) {
          indexTemp += 2; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseAtom(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        for (i = 0; ; ++i) {
          indexTemp2 = ParseAtext(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseAuthresVersion(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
          while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          }
        } else {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseAuthservId(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseValue(str, index, endIndex, tokener);
    }

    public static int ParseCFWS(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexStart3, indexTemp,
        indexTemp2, indexTemp3, state, state2, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          for (i2 = 0; ; ++i2) {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              index = ParseFWS(str, index, endIndex, tokener);
      tx4 = HeaderParserUtility.ParseCommentLax(
str,
index,
endIndex,
tokener);
              if (tx4 == index) {
                index = indexStart3; break;
              } else {
                index = tx4;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              if (i2 < 1) {
                index = indexStart2;
              }
              break;
            }
          }
          if (index == indexStart2) {
            break;
          }
          index = ParseFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        for (i = 0; ; ++i) {
          indexTemp2 = ParseFWS(str, index, endIndex, tokener);
          if (indexTemp2 == index) {
            if (i < 1) {
              indexTemp = indexStart;
            }
            break;
          } else {
 index = indexTemp2;
}
        }
        index = indexStart;
        if (indexTemp2 != indexStart) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseCertifierList(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseDomainName(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 58)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseDomainName(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseCharset(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) == 38) || (str.charAt(index) == 43) ||
          (str.charAt(index) == 45) || (str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
          (str.charAt(index) >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 94 &&
          str.charAt(index) <= 126))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
            35 && str.charAt(index) <= 36) || (str.charAt(index) == 38) || (str.charAt(index) ==
            43) || (str.charAt(index) == 45) || (str.charAt(index) >= 48 && str.charAt(index) <=
            57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) || (str.charAt(index)
            >= 94 && str.charAt(index) <= 126))) {
            ++index;
          }
        } else {
          break;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseDate(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseDay(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        if (index + 2 < endIndex && (((str.charAt(index) & ~32) == 74 && (str.charAt(index +
          1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 78) || ((str.charAt(index) & ~32) == 70 && (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 66) || ((str.charAt(index) & ~32) == 77 && (str.charAt(index + 1) & ~32)
          == 65 && (str.charAt(index + 2) & ~32) == 82) || ((str.charAt(index) & ~32) ==
          65 && (str.charAt(index + 1) & ~32) == 80 && (str.charAt(index + 2) & ~32) ==
          82) || ((str.charAt(index) & ~32) == 77 && (str.charAt(index + 1) & ~32) == 65 &&
          (str.charAt(index + 2) & ~32) == 89) || ((str.charAt(index) & ~32) == 74 &&
          (str.charAt(index + 1) & ~32) == 85 && (str.charAt(index + 2) & ~32) == 78) ||
          ((str.charAt(index) & ~32) == 74 && (str.charAt(index + 1) & ~32) == 85 &&
          (str.charAt(index + 2) & ~32) == 76) || ((str.charAt(index) & ~32) == 65 &&
          (str.charAt(index + 1) & ~32) == 85 && (str.charAt(index + 2) & ~32) == 71) ||
          ((str.charAt(index) & ~32) == 83 && (str.charAt(index + 1) & ~32) == 69 &&
          (str.charAt(index + 2) & ~32) == 80) || ((str.charAt(index) & ~32) == 79 &&
          (str.charAt(index + 1) & ~32) == 67 && (str.charAt(index + 2) & ~32) == 84) ||
          ((str.charAt(index) & ~32) == 78 && (str.charAt(index + 1) & ~32) == 79 &&
          (str.charAt(index + 2) & ~32) == 86) || ((str.charAt(index) & ~32) == 68 &&
          (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 67))) {
          index += 3;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseYear(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDateTime(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            tx3 = ParseDayOfWeek(str, index, endIndex, tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        tx2 = ParseDate(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        tx2 = ParseTime(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDay(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        for (i = 0; i < 2; ++i) {
          if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          } else if (i < 1) {
            index = indexStart; break;
          } else {
 break;
}
        }
        if (index == indexStart) {
 break;
}
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDayOfWeek(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index + 2 < endIndex && (((str.charAt(index) & ~32) == 77 && (str.charAt(index +
          1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 78) || ((str.charAt(index) & ~32) == 84 && (str.charAt(index + 1) & ~32) == 85 && (str.charAt(index + 2) & ~32) == 69) || ((str.charAt(index) & ~32) == 87 && (str.charAt(index + 1) & ~32)
          == 69 && (str.charAt(index + 2) & ~32) == 68) || ((str.charAt(index) & ~32) ==
          84 && (str.charAt(index + 1) & ~32) == 72 && (str.charAt(index + 2) & ~32) ==
          85) || ((str.charAt(index) & ~32) == 70 && (str.charAt(index + 1) & ~32) == 82 &&
          (str.charAt(index + 2) & ~32) == 73) || ((str.charAt(index) & ~32) == 83 &&
          (str.charAt(index + 1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 84) ||
          ((str.charAt(index) & ~32) == 83 && (str.charAt(index + 1) & ~32) == 85 &&
          (str.charAt(index + 2) & ~32) == 78))) {
          index += 3;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDesignator(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMilitaryString(str, index, endIndex, tokener);
    }

    public static int ParseDiagDeprecated(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexStart3, indexStart4, indexTemp,
        indexTemp2, indexTemp3, indexTemp4, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) == 33)) {
          ++index;
        } else {
          break;
        }
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = index;
            do {
              indexStart3 = index;
        if (index + 1 < endIndex && str.charAt(index) == 50 && str.charAt(index + 1) ==
                53) {
                index += 2;
              } else {
                break;
              }
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 53)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index + 1 < endIndex && (str.charAt(index) == 50) && (str.charAt(index +
                1) >= 48 && str.charAt(index + 1) <= 52)) {
                index += 2;
              } else {
                break;
              }
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (index + 2 < endIndex && ((str.charAt(index) == 49) && ((str.charAt(index +
              1) >= 48 && str.charAt(index + 1) <= 57) || (str.charAt(index + 2) >= 48 &&
              str.charAt(index + 2) <= 57)))) {
              indexTemp2 += 3; break;
            }
            if (index + 1 < endIndex && ((str.charAt(index) >= 49 && str.charAt(index) <=
              57) && (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
              indexTemp2 += 2; break;
            }
            if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        for (i = 0; i < 3; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 46)) {
              ++index;
            } else {
              break;
            }
            do {
              indexTemp3 = index;
              do {
                indexTemp4 = index;
                do {
                  indexStart4 = index;
        if (index + 1 < endIndex && str.charAt(index) == 50 && str.charAt(index + 1) ==
                    53) {
                    index += 2;
                  } else {
                    break;
                  }
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                    53)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  if (index + 1 < endIndex && (str.charAt(index) == 50) &&
                    (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 52)) {
                    index += 2;
                  } else {
                    break;
                  }
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                    57)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                if (index + 2 < endIndex && ((str.charAt(index) == 49) &&
                  ((str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57) ||
                  (str.charAt(index + 2) >= 48 && str.charAt(index + 2) <= 57)))) {
                  indexTemp3 += 3; break;
                }
                if (index + 1 < endIndex && ((str.charAt(index) >= 49 && str.charAt(index)
                  <= 57) && (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
                  indexTemp3 += 2; break;
                }
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                  57)) {
                  ++indexTemp3; break;
                }
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                index = indexStart2; break;
              }
            } while (false);
            if (index == indexStart2) {
              break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 3) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDiagIdentity(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i2, i4, indexStart, indexStart2, indexStart3, indexStart4,
        indexTemp, indexTemp2, indexTemp3, indexTemp4, indexTemp5, state,
        state2, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          for (i2 = 0; ; ++i2) {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              tx4 = ParseLabel(str, index, endIndex, tokener);
              if (tx4 == index) {
                break;
              } else {
                index = tx4;
              }
              if (index < endIndex && (str.charAt(index) == 46)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              if (i2 < 1) {
                index = indexStart2;
              }
              break;
            }
          }
          if (index == indexStart2) {
            break;
          }
          do {
            indexTemp3 = index;
            do {
              indexTemp4 = index;
              do {
                indexStart4 = index;
                if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
                  90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
                  ++index;
                } else {
                  break;
                }
                for (i4 = 0; ; ++i4) {
                  indexTemp5 = index;
                  do {
                    if (index + 1 < endIndex && ((str.charAt(index) == 45) &&
                    ((str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 90) ||
                    (str.charAt(index + 1) >= 97 && str.charAt(index + 1) <= 122) ||
                    (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57)))) {
                    indexTemp5 += 2; break;
                    }
                    if (index < endIndex && ((str.charAt(index) >= 65 &&
                    str.charAt(index) <= 90) || (str.charAt(index) >= 97 && str.charAt(index)
                    <= 122) || (str.charAt(index) >= 48 && str.charAt(index) <= 57))) {
                    ++indexTemp5; break;
                    }
                  } while (false);
                  if (indexTemp5 != index) {
                    index = indexTemp5;
                  } else {
                    if (i4 < 1) {
                    index = indexStart4;
                    }
                    break;
                  }
                }
                if (index == indexStart4) {
                  break;
                }
                indexTemp4 = index;
                index = indexStart4;
              } while (false);
              if (indexTemp4 != index) {
                indexTemp3 = indexTemp4; break;
              }
              indexTemp4 = index;
              do {
                indexStart4 = index;
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                  57)) {
                  ++index;
                } else {
                  break;
                }
                while (index < endIndex && ((str.charAt(index) >= 48 &&
                  str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
                  ++index;
                }
                if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
                  90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
                  ++index;
                } else {
                  index = indexStart4; break;
                }
                while (true) {
                  indexTemp5 = index;
                  do {
                    if (index + 1 < endIndex && ((str.charAt(index) == 45) &&
                    ((str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 90) ||
                    (str.charAt(index + 1) >= 97 && str.charAt(index + 1) <= 122) ||
                    (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57)))) {
                    indexTemp5 += 2; break;
                    }
                    if (index < endIndex && ((str.charAt(index) >= 65 &&
                    str.charAt(index) <= 90) || (str.charAt(index) >= 97 && str.charAt(index)
                    <= 122) || (str.charAt(index) >= 48 && str.charAt(index) <= 57))) {
                    ++indexTemp5; break;
                    }
                  } while (false);
                  if (indexTemp5 != index) {
                    index = indexTemp5;
                  } else {
 break;
}
                }
                indexTemp4 = index;
                index = indexStart4;
              } while (false);
              if (indexTemp4 != index) {
                indexTemp3 = indexTemp4; break;
              }
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              index = indexStart2; break;
            }
          } while (false);
          if (index == indexStart2) {
            break;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45) || (str.charAt(index) ==
          95))) {
          ++indexTemp;
          while (indexTemp < endIndex && ((str.charAt(indexTemp) >= 65 &&
            str.charAt(indexTemp) <= 90) || (str.charAt(indexTemp) >= 97 &&
            str.charAt(indexTemp) <= 122) || (str.charAt(indexTemp) >= 48 &&
            str.charAt(indexTemp) <= 57) || (str.charAt(indexTemp) == 45) ||
            (str.charAt(indexTemp) == 95))) {
            ++indexTemp;
          }
          break;
        }
        // Unlimited production in choice
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDiagOther(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 1 < endIndex && str.charAt(index) == 33 && str.charAt(index + 1) == 46) {
          index += 2;
        } else {
          break;
        }
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 46)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseDiagIdentity(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDispNotParam(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) == 38) || (str.charAt(index) == 43) ||
          (str.charAt(index) >= 45 && str.charAt(index) <= 46) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
            35 && str.charAt(index) <= 36) || (str.charAt(index) == 38) || (str.charAt(index) ==
            43) || (str.charAt(index) >= 45 && str.charAt(index) <= 46) || (str.charAt(index)
            >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 65 && str.charAt(index)
            <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        if (index + 8 < endIndex && (str.charAt(index) == 61) && (((str.charAt(index + 1) & ~32) == 82 && (str.charAt(index + 2) & ~32) == 69 && (str.charAt(index + 3) & ~32) == 81 && (str.charAt(index + 4) & ~32) == 85 && (str.charAt(index + 5) & ~32) == 73 && (str.charAt(index + 6) & ~32) == 82 && (str.charAt(index + 7) & ~32) == 69 && (str.charAt(index + 8) & ~32) == 68) || ((str.charAt(index + 1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 80 && (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) == 73 && (str.charAt(index + 5) & ~32) == 79 && (str.charAt(index + 6) & ~32) == 78 && (str.charAt(index + 7) & ~32) == 65 && (str.charAt(index + 8) & ~32) == 76))) {
          index += 9;
        } else {
          index = indexStart; break;
        }
        if (index < endIndex && (str.charAt(index) == 44)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseValue(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseValue(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDisplayName(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParsePhrase(str, index, endIndex, tokener);
    }

    public static int ParseDistName(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart2, indexTemp, indexTemp2;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
          ++indexTemp; break;
        }
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          } else {
            break;
          }
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) == 43) ||
            (str.charAt(index) == 45) || (str.charAt(index) == 95))) {
            ++index;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseDomain(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state, state2, state3, tx3, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseDomainLiteral(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          tx3 = ParseAtom(str, index, endIndex, tokener);
          if (tx3 == index) {
            break;
          } else {
            index = tx3;
          }
          while (true) {
            state3 = (tokener != null) ? tokener.GetState() : 0;
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) == 46)) {
                ++index;
              } else {
                break;
              }
              tx4 = ParseAtom(str, index, endIndex, tokener);
              if (tx4 == index) {
                index = indexStart3; break;
              } else {
                index = tx4;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else if (tokener != null) {
              tokener.RestoreState(state3); break;
            } else {
 break;
}
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(9, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParseDomainLiteral(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 91)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseDtext(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 93)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDomainName(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57))) {
          ++index;
        } else {
          break;
        }
        index = ParseLdhStr(str, index, endIndex, tokener);
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index + 1 < endIndex && (str.charAt(index) == 46) && ((str.charAt(index +
              1) >= 65 && str.charAt(index + 1) <= 90) || (str.charAt(index + 1) >= 97 &&
              str.charAt(index + 1) <= 122) || (str.charAt(index + 1) >= 48 &&
              str.charAt(index + 1) <= 57))) {
              index += 2;
            } else {
              break;
            }
            index = ParseLdhStr(str, index, endIndex, tokener);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDomainNoCfws(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        indexTemp4, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseDotAtomText(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) == 91)) {
            ++index;
          } else {
            break;
          }
          while (true) {
            indexTemp3 = index;
            do {
              if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <=
                90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                ++indexTemp3; break;
              }
              indexTemp4 = index;
              do {
                if (index < endIndex && ((str.charAt(index) >= 128 && str.charAt(index) <=
                  55295) || (str.charAt(index) >= 57344 && str.charAt(index) <= 65535))) {
                  ++indexTemp4; break;
                }
                if (index + 1 < endIndex && ((str.charAt(index) >= 55296 &&
                  str.charAt(index) <= 56319) && (str.charAt(index + 1) >= 56320 &&
                  str.charAt(index + 1) <= 57343))) {
                  indexTemp4 += 2; break;
                }
              } while (false);
              if (indexTemp4 != index) {
                indexTemp3 = indexTemp4; break;
              }
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
 break;
}
          }
          if (index < endIndex && (str.charAt(index) == 93)) {
            ++index;
          } else {
            index = indexStart2; break;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDotAtom(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseDotAtomText(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDotAtomText(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = ParseAtext(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 46)) {
              ++index;
            } else {
              break;
            }
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseAtext(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 1) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseDtext(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 94 && str.charAt(index) <= 126) || (str.charAt(index) >= 1 &&
          str.charAt(index) <= 8) || (str.charAt(index) >= 11 && str.charAt(index) <= 12) ||
          (str.charAt(index) >= 14 && str.charAt(index) <= 31) || (str.charAt(index) == 127))) {
          ++indexTemp; break;
        }
        indexTemp2 = ParseQuotedPair(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (index < endIndex && ((str.charAt(index) >= 128 && str.charAt(index) <= 55295) ||
          (str.charAt(index) >= 57344 && str.charAt(index) <= 65535))) {
          ++indexTemp; break;
        }
        if (index + 1 < endIndex && ((str.charAt(index) >= 55296 && str.charAt(index) <=
          56319) && (str.charAt(index + 1) >= 56320 && str.charAt(index + 1) <= 57343))) {
          indexTemp += 2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseEncodingCount(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
          while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseEncodingKeyword(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
          ++index;
        } else {
          index = indexStart; break;
        }
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) ==
            45))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseFWS(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexTemp, indexTemp2;
      indexStart = index;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
        if (index + 1 < endIndex && str.charAt(index) == 13 && str.charAt(index + 1) ==
              10) {
              index += 2;
            }
            if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) == 9))) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseGeneralKeyword(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) ==
            45))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseGroup(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseDisplayName(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 58)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseGroupList(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(5, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParseGroupList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexStart3, indexTemp,
        indexTemp2, indexTemp3, state, state2, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseMailboxList(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseObsGroupList(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          for (i2 = 0; ; ++i2) {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              index = ParseFWS(str, index, endIndex, tokener);
      tx4 = HeaderParserUtility.ParseCommentLax(
str,
index,
endIndex,
tokener);
              if (tx4 == index) {
                index = indexStart3; break;
              } else {
                index = tx4;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              if (i2 < 1) {
                index = indexStart2;
              }
              break;
            }
          }
          if (index == indexStart2) {
            break;
          }
          index = ParseFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        for (i = 0; ; ++i) {
          indexTemp2 = ParseFWS(str, index, endIndex, tokener);
          if (indexTemp2 == index) {
            if (i < 1) {
              indexTemp = indexStart;
            }
            break;
          } else {
 index = indexTemp2;
}
        }
        index = indexStart;
        if (indexTemp2 != indexStart) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderAcceptLanguage(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state, state2, state3, tx3, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          tx3 = ParseLanguageQ(str, index, endIndex, tokener);
          if (tx3 == index) {
            index = indexStart2; break;
          } else {
            index = tx3;
          }
          while (true) {
            state3 = (tokener != null) ? tokener.GetState() : 0;
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) == 44)) {
                ++index;
              } else {
                break;
              }
              index = ParseCFWS(str, index, endIndex, tokener);
              tx4 = ParseLanguageQ(str, index, endIndex, tokener);
              if (tx4 == index) {
                index = indexStart3; break;
              } else {
                index = tx4;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else if (tokener != null) {
              tokener.RestoreState(state3); break;
            } else {
 break;
}
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        indexTemp2 = ParseObsAcceptLanguage(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderAlternateRecipient(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderArchive(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            if (index + 1 < endIndex && (str.charAt(index) & ~32) == 78 &&
              (str.charAt(index + 1) & ~32) == 79) {
              indexTemp2 += 2; break;
            }
            if (index + 2 < endIndex && (str.charAt(index) & ~32) == 89 &&
              (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 83) {
              indexTemp2 += 3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseParameter(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderArchivedAt(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 60)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <=
              59) || (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index)
              <= 126))) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 62)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderAuthenticationResults(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseAuthservId(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            tx3 = ParseCFWS(str, index, endIndex, tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            tx3 = ParseAuthresVersion(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = ParseNoResult(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexStart2 = index;
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseResinfo(str, index, endIndex, tokener);
              if (indexTemp3 == index) {
                if (i2 < 1) {
                  indexTemp2 = indexStart2;
                }
                break;
              } else {
 index = indexTemp3;
}
            }
            index = indexStart2;
            if (indexTemp3 != indexStart2) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderAutoSubmitted(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
          (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 65 &&
          str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126) ||
          (str.charAt(index) >= 42 && str.charAt(index) <= 43) || (str.charAt(index) >= 38 &&
          str.charAt(index) <= 39) || (str.charAt(index) == 63))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
            35 && str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <=
            46) || (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index)
            >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index)
            <= 126) || (str.charAt(index) >= 42 && str.charAt(index) <= 43) ||
            (str.charAt(index) >= 38 && str.charAt(index) <= 39) || (str.charAt(index) ==
            63))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        while (true) {
          indexTemp2 = ParseOptParameterList(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderAutoforwarded(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderBcc(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, indexTemp3, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = ParseAddressList(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = ParseCFWS(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentBase(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <= 59) ||
          (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index) <=
          126))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <=
            59) || (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index)
            <= 126))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentDisposition(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
          (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 65 &&
          str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126) ||
          (str.charAt(index) >= 42 && str.charAt(index) <= 43) || (str.charAt(index) >= 38 &&
          str.charAt(index) <= 39) || (str.charAt(index) == 63))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
            35 && str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <=
            46) || (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index)
            >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index)
            <= 126) || (str.charAt(index) >= 42 && str.charAt(index) <= 43) ||
            (str.charAt(index) >= 38 && str.charAt(index) <= 39) || (str.charAt(index) ==
            63))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseParameter(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentDuration(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        for (i = 0; i < 10; ++i) {
          if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          } else if (i < 1) {
            index = indexStart; break;
          } else {
 break;
}
        }
        if (index == indexStart) {
 break;
}
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentId(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMsgId(str, index, endIndex, tokener);
    }

    public static int ParseHeaderContentLanguage(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseLanguageList(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentLocation(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <= 59) ||
          (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index) <=
          126))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <=
            59) || (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index)
            <= 126))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentMd5(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 47 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 43) || (str.charAt(index) == 61))) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentTransferEncoding(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) ==
            45))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderContentType(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseRestrictedName(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 47)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseRestrictedName(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseParameter(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderControl(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2;
      indexStart = index;
      indexTemp = index;
      do {
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
          (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 65 &&
          str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126) ||
          (str.charAt(index) >= 42 && str.charAt(index) <= 43) || (str.charAt(index) >= 38 &&
          str.charAt(index) <= 39) || (str.charAt(index) == 63))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
            35 && str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <=
            46) || (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index)
            >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index)
            <= 126) || (str.charAt(index) >= 42 && str.charAt(index) <= 43) ||
            (str.charAt(index) >= 38 && str.charAt(index) <= 39) || (str.charAt(index) ==
            63))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        while (true) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
         if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
              9))) {
              ++index;
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
                9))) {
                ++index;
              }
            } else {
              break;
            }
            if (index < endIndex && (str.charAt(index) >= 33 && str.charAt(index) <= 126)) {
              ++index;
          while (index < endIndex && (str.charAt(index) >= 33 && str.charAt(index) <=
                126)) {
                ++index;
              }
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseHeaderConversion(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderConversionWithLoss(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderDate(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseDateTime(str, index, endIndex, tokener);
    }

    public static int ParseHeaderDeferredDelivery(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseDateTime(str, index, endIndex, tokener);
    }

    public static int ParseHeaderDeliveryDate(
String str,
int index,
int endIndex,
ITokener tokener) {
    int i2, indexStart, indexStart2, indexTemp, indexTemp2, state, state2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseDateTime(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          tx3 = ParseDayOfWeek(str, index, endIndex, tokener);
          if (tx3 == index) {
            index = indexStart2; break;
          } else {
            index = tx3;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          if (index + 2 < endIndex && (((str.charAt(index) & ~32) == 74 &&
            (str.charAt(index + 1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 78) ||
            ((str.charAt(index) & ~32) == 70 && (str.charAt(index + 1) & ~32) == 69 &&
            (str.charAt(index + 2) & ~32) == 66) || ((str.charAt(index) & ~32) == 77 &&
            (str.charAt(index + 1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 82) ||
            ((str.charAt(index) & ~32) == 65 && (str.charAt(index + 1) & ~32) == 80 &&
            (str.charAt(index + 2) & ~32) == 82) || ((str.charAt(index) & ~32) == 77 &&
            (str.charAt(index + 1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 89) ||
            ((str.charAt(index) & ~32) == 74 && (str.charAt(index + 1) & ~32) == 85 &&
            (str.charAt(index + 2) & ~32) == 78) || ((str.charAt(index) & ~32) == 74 &&
            (str.charAt(index + 1) & ~32) == 85 && (str.charAt(index + 2) & ~32) == 76) ||
            ((str.charAt(index) & ~32) == 65 && (str.charAt(index + 1) & ~32) == 85 &&
            (str.charAt(index + 2) & ~32) == 71) || ((str.charAt(index) & ~32) == 83 &&
            (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 80) ||
            ((str.charAt(index) & ~32) == 79 && (str.charAt(index + 1) & ~32) == 67 &&
            (str.charAt(index + 2) & ~32) == 84) || ((str.charAt(index) & ~32) == 78 &&
            (str.charAt(index + 1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 86) ||
            ((str.charAt(index) & ~32) == 68 && (str.charAt(index + 1) & ~32) == 69 &&
            (str.charAt(index + 2) & ~32) == 67))) {
            index += 3;
          } else {
            index = indexStart2; break;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          for (i2 = 0; i2 < 2; ++i2) {
            if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
              ++index;
            } else if (i2 < 1) {
              index = indexStart2; break;
            } else {
 break;
}
          }
          if (index == indexStart2) {
 break;
}
          index = ParseCFWS(str, index, endIndex, tokener);
          if (index + 2 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
            57) || (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57)) &&
            (str.charAt(index + 2) == 58)) {
            index += 3;
          } else {
            index = indexStart2; break;
          }
          if (index + 2 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
            57) || (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57)) &&
            (str.charAt(index + 2) == 58)) {
            index += 3;
          } else {
            index = indexStart2; break;
          }
          if (index + 1 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
            57) || (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
            index += 2;
          } else {
            index = indexStart2; break;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          for (i2 = 0; ; ++i2) {
            if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
              ++index;
            } else if (i2 < 4) {
              index = indexStart2; break;
            } else {
 break;
}
          }
          if (index == indexStart2) {
 break;
}
          index = ParseCFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderDiscloseRecipients(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderDispositionNotificationOptions(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseDispNotParam(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseDispNotParam(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderDispositionNotificationTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMailboxList(str, index, endIndex, tokener);
    }

    public static int ParseHeaderDistribution(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        tx2 = ParseDistName(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseDistName(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderDkimSignature(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseNoEncodedWords(str, index, endIndex, tokener);
    }

    public static int ParseHeaderEdiintFeatures(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2;
      indexStart = index;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) == 9))) {
          ++index;
        }
        if (index < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
          (str.charAt(index) >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 97 &&
          str.charAt(index) <= 122) || (str.charAt(index) == 45))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
            57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) || (str.charAt(index)
            >= 97 && str.charAt(index) <= 122) || (str.charAt(index) == 45))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        while (true) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
         if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
              9))) {
              ++index;
            }
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
         if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
              9))) {
              ++index;
            }
            if (index < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
              57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
              (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) ==
              45))) {
              ++index;
              while (index < endIndex && ((str.charAt(index) >= 48 && str.charAt(index)
                <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) ==
                45))) {
                ++index;
              }
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseHeaderEesstVersion(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        if (index + 2 < endIndex && str.charAt(index) == 49 && str.charAt(index + 1) == 46 &&
          str.charAt(index + 2) == 48) {
          index += 3;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderEncoding(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            tx3 = ParseEncodingCount(str, index, endIndex, tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseEncodingKeyword(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 1) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseEncodingCount(str, index, endIndex, tokener);
        for (i = 0; ; ++i) {
          indexTemp2 = ParseEncodingKeyword(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderEncrypted(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseWord(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseWord(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderFollowupTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseNewsgroupList(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = index;
        do {
          indexStart2 = index;
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
            9))) {
            ++index;
          }
          if (index + 5 < endIndex && (str.charAt(index) & ~32) == 80 && (str.charAt(index +
            1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 83 && (str.charAt(index +
            3) & ~32) == 84 && (str.charAt(index + 4) & ~32) == 69 && (str.charAt(index +
            5) & ~32) == 82) {
            index += 6;
          } else {
            index = indexStart2; break;
          }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
            9))) {
            ++index;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderFrom(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseMailboxList(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseAddressList(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderGenerateDeliveryReport(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseFWS(str, index, endIndex, tokener);
    }

    public static int ParseHeaderImportance(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderInReplyTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, indexTemp3, state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexTemp3 = ParsePhrase(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = ParseMsgId(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderIncompleteCopy(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseFWS(str, index, endIndex, tokener);
    }

    public static int ParseHeaderInjectionDate(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseDateTime(str, index, endIndex, tokener);
    }

    public static int ParseHeaderInjectionInfo(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParsePathIdentity(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseParameter(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderJabberId(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) == 32)) {
          ++index;
        } else {
          break;
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        tx2 = ParsePathxmpp(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderKeywords(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParsePhrase(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParsePhrase(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderLanguage(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index + 1 < endIndex && (((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122)) && ((str.charAt(index +
              1) >= 65 && str.charAt(index + 1) <= 90) || (str.charAt(index + 1) >= 97 &&
              str.charAt(index + 1) <= 122)))) {
              index += 2;
            } else {
              break;
            }
            while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
              ++index;
            }
            do {
              indexTemp3 = index;
              do {
                indexStart3 = index;
                if (index < endIndex && (str.charAt(index) == 40)) {
                  ++index;
                } else {
                  break;
                }
                tx4 = ParseLanguageDescription(str, index, endIndex, tokener);
                if (tx4 == index) {
                  index = indexStart3; break;
                } else {
                  index = tx4;
                }
                if (index < endIndex && (str.charAt(index) == 41)) {
                  ++index;
                } else {
                  index = indexStart3; break;
                }
                indexTemp3 = index;
                index = indexStart3;
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                break;
              }
            } while (false);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderLatestDeliveryTime(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseDateTime(str, index, endIndex, tokener);
    }

    public static int ParseHeaderListId(
String str,
int index,
int endIndex,
ITokener tokener) {
int i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3, state,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = ParsePhrase(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = ParseCFWS(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        if (index < endIndex && (str.charAt(index) == 60)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseAtext(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 1) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 46)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseDotAtomText(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        if (index < endIndex && (str.charAt(index) == 62)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMessageContext(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) ==
            45))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMessageId(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMsgId(str, index, endIndex, tokener);
    }

    public static int ParseHeaderMimeVersion(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
          while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 46)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
          while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsAcp127MessageIdentifier(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        for (i = 0; i < 69; ++i) {
          indexTemp2 = ParsePsChar(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsCodressMessageIndicator(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseNonnegInteger(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsCopyPrecedence(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParsePrecedence(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsExemptedAddress(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseAddressList(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsExtendedAuthorisationInfo(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseDateTime(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsHandlingInstructions(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseMilitaryStringSequence(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsMessageInstructions(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseMilitaryStringSequence(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsMessageType(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            if (index < endIndex && (str.charAt(index) == 48)) {
              ++indexTemp2; break;
            }
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) >= 49 && str.charAt(index) <= 57)) {
                ++index;
              } else {
                break;
              }
           while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                57)) {
                ++index;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (index + 7 < endIndex && (str.charAt(index) & ~32) == 69 &&
              (str.charAt(index + 1) & ~32) == 88 && (str.charAt(index + 2) & ~32) == 69 &&
              (str.charAt(index + 3) & ~32) == 82 && (str.charAt(index + 4) & ~32) ==
              67 && (str.charAt(index + 5) & ~32) == 73 && (str.charAt(index + 6) & ~32)
              == 83 && (str.charAt(index + 7) & ~32) == 69) {
              indexTemp2 += 8; break;
            }
            if (index + 8 < endIndex && (str.charAt(index) & ~32) == 79 &&
              (str.charAt(index + 1) & ~32) == 80 && (str.charAt(index + 2) & ~32) == 69 &&
              (str.charAt(index + 3) & ~32) == 82 && (str.charAt(index + 4) & ~32) ==
              65 && (str.charAt(index + 5) & ~32) == 84 && (str.charAt(index + 6) & ~32)
       == 73 && (str.charAt(index + 7) & ~32) == 79 && (str.charAt(index + 8) & ~32) ==
                78) {
              indexTemp2 += 9; break;
            }
            if (index + 6 < endIndex && (str.charAt(index) & ~32) == 80 &&
              (str.charAt(index + 1) & ~32) == 82 && (str.charAt(index + 2) & ~32) == 79 &&
              (str.charAt(index + 3) & ~32) == 74 && (str.charAt(index + 4) & ~32) ==
              69 && (str.charAt(index + 5) & ~32) == 67 && (str.charAt(index + 6) & ~32)
              == 84) {
              indexTemp2 += 7; break;
            }
            if (index + 4 < endIndex && (str.charAt(index) & ~32) == 68 &&
              (str.charAt(index + 1) & ~32) == 82 && (str.charAt(index + 2) & ~32) == 73 &&
              (str.charAt(index + 3) & ~32) == 76 && (str.charAt(index + 4) & ~32) ==
              76) {
              indexTemp2 += 5; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseMessageTypeParam(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsOriginatorPlad(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        for (i = 0; i < 69; ++i) {
          indexTemp2 = ParsePsChar(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsOriginatorReference(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        for (i = 0; i < 69; ++i) {
          indexTemp2 = ParsePsChar(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsOtherRecipientsIndicatorCc(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseDesignator(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseDesignator(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsOtherRecipientsIndicatorTo(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseDesignator(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseDesignator(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsPrimaryPrecedence(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParsePrecedence(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMmhsSubjectIndicatorCodes(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseSicSequence(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderMtPriority(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          do {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) == 45)) {
                ++index;
              }
              if (index < endIndex && (str.charAt(index) >= 49 && str.charAt(index) <= 57)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              index = indexStart2; break;
            }
          } while (false);
          if (index == indexStart2) {
            break;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) == 48)) {
            ++index;
          } else {
            break;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderNewsgroups(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (index < endIndex && (str.charAt(index) == 32)) {
          ++index;
        }
        tx2 = ParseNewsgroupList(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderObsoletes(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseMsgId(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseMsgId(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderOriginalRecipient(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseAtom(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        while (true) {
          indexTemp2 = ParseText(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderPath(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        while (true) {
          indexTemp2 = ParsePathList(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45) || (str.charAt(index) ==
          95))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) == 45) ||
            (str.charAt(index) == 95))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderPreventNondeliveryReport(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseFWS(str, index, endIndex, tokener);
    }

    public static int ParseHeaderPriority(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderReceived(
String str,
int index,
int endIndex,
ITokener tokener) {
int i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3, state,
        tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = index;
            indexStart2 = index;
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseReceivedToken(str, index, endIndex, tokener);
              if (indexTemp3 == index) {
                if (i2 < 1) {
                  indexTemp2 = indexStart2;
                }
                break;
              } else {
 index = indexTemp3;
}
            }
            index = indexStart2;
            if (indexTemp3 != indexStart2) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = ParseCFWS(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseDateTime(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderReceivedSpf(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            if (index + 3 < endIndex && (str.charAt(index) & ~32) == 80 &&
              (str.charAt(index + 1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 83 &&
              (str.charAt(index + 3) & ~32) == 83) {
              indexTemp2 += 4; break;
            }
            if (index + 3 < endIndex && (str.charAt(index) & ~32) == 70 &&
              (str.charAt(index + 1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 73 &&
              (str.charAt(index + 3) & ~32) == 76) {
              indexTemp2 += 4; break;
            }
            if (index + 7 < endIndex && (str.charAt(index) & ~32) == 83 &&
              (str.charAt(index + 1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 70 &&
              (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) ==
              70 && (str.charAt(index + 5) & ~32) == 65 && (str.charAt(index + 6) & ~32)
              == 73 && (str.charAt(index + 7) & ~32) == 76) {
              indexTemp2 += 8; break;
            }
            if (index + 6 < endIndex && (str.charAt(index) & ~32) == 78 &&
              (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 85 &&
              (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) ==
              82 && (str.charAt(index + 5) & ~32) == 65 && (str.charAt(index + 6) & ~32)
              == 76) {
              indexTemp2 += 7; break;
            }
            if (index + 3 < endIndex && (str.charAt(index) & ~32) == 78 &&
              (str.charAt(index + 1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 78 &&
              (str.charAt(index + 3) & ~32) == 69) {
              indexTemp2 += 4; break;
            }
            if (index + 8 < endIndex && (str.charAt(index) & ~32) == 84 &&
              (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 77 &&
              (str.charAt(index + 3) & ~32) == 80 && (str.charAt(index + 4) & ~32) ==
              69 && (str.charAt(index + 5) & ~32) == 82 && (str.charAt(index + 6) & ~32)
       == 82 && (str.charAt(index + 7) & ~32) == 79 && (str.charAt(index + 8) & ~32) ==
                82) {
              indexTemp2 += 9; break;
            }
            if (index + 8 < endIndex && (str.charAt(index) & ~32) == 80 &&
              (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 82 &&
              (str.charAt(index + 3) & ~32) == 77 && (str.charAt(index + 4) & ~32) ==
              69 && (str.charAt(index + 5) & ~32) == 82 && (str.charAt(index + 6) & ~32)
       == 82 && (str.charAt(index + 7) & ~32) == 79 && (str.charAt(index + 8) & ~32) ==
                82) {
              indexTemp2 += 9; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        for (i = 0; ; ++i) {
          indexTemp2 = ParseFWS(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
      tx3 = HeaderParserUtility.ParseCommentLax(
str,
index,
endIndex,
tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseFWS(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 1) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        index = ParseKeyValueList(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderRequireRecipientValidSince(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseAddrSpec(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseDateTime(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderResentTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseStrictHeaderTo(str, index, endIndex, tokener);
    }

    public static int ParseHeaderReturnPath(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParsePath(str, index, endIndex, tokener);
    }

    public static int ParseHeaderSender(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseMailbox(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseMailbox(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseGroup(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderSensitivity(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderSioLabel(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseSioLabelParmSeq(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderSolicitation(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseSolicitationKeywords(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderSupersedes(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexTemp, indexTemp2, state, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 60)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            tx3 = ParseIdLeft(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            if (index < endIndex && (str.charAt(index) == 64)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            tx3 = ParseIdRight(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            if (index < endIndex && (str.charAt(index) == 62)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseLaxHeaderTo(str, index, endIndex, tokener);
    }

    public static int ParseHeaderUserAgent(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
              35 && str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index)
              <= 46) || (str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
              (str.charAt(index) >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 94 &&
              str.charAt(index) <= 126) || (str.charAt(index) >= 42 && str.charAt(index) <=
              43) || (str.charAt(index) >= 38 && str.charAt(index) <= 39) ||
              (str.charAt(index) == 63))) {
              ++index;
              while (index < endIndex && ((str.charAt(index) == 33) ||
                (str.charAt(index) >= 35 && str.charAt(index) <= 36) || (str.charAt(index) >=
                45 && str.charAt(index) <= 46) || (str.charAt(index) >= 48 && str.charAt(index)
                <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                (str.charAt(index) >= 94 && str.charAt(index) <= 126) || (str.charAt(index) >=
                42 && str.charAt(index) <= 43) || (str.charAt(index) >= 38 && str.charAt(index)
                <= 39) || (str.charAt(index) == 63))) {
                ++index;
              }
            } else {
              index = indexStart2; break;
            }
            do {
              indexTemp3 = index;
              do {
                indexStart3 = index;
                index = ParseCFWS(str, index, endIndex, tokener);
                if (index < endIndex && (str.charAt(index) == 47)) {
                  ++index;
                } else {
                  index = indexStart3; break;
                }
                index = ParseCFWS(str, index, endIndex, tokener);
                if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index)
                  >= 35 && str.charAt(index) <= 36) || (str.charAt(index) >= 45 &&
                  str.charAt(index) <= 46) || (str.charAt(index) >= 48 && str.charAt(index) <=
                  57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                  (str.charAt(index) >= 94 && str.charAt(index) <= 126) || (str.charAt(index)
                  >= 42 && str.charAt(index) <= 43) || (str.charAt(index) >= 38 &&
                  str.charAt(index) <= 39) || (str.charAt(index) == 63))) {
                  ++index;
                  while (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) || (str.charAt(index)
                    >= 45 && str.charAt(index) <= 46) || (str.charAt(index) >= 48 &&
                    str.charAt(index) <= 57) || (str.charAt(index) >= 65 && str.charAt(index)
                    <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126) ||
                    (str.charAt(index) >= 42 && str.charAt(index) <= 43) || (str.charAt(index)
                    >= 38 && str.charAt(index) <= 39) || (str.charAt(index) == 63))) {
                    ++index;
                  }
                } else {
                  index = indexStart3; break;
                }
                indexTemp3 = index;
                index = indexStart3;
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                break;
              }
            } while (false);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderVbrInfo(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        indexTemp4, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            do {
              indexTemp3 = index;
              do {
                indexTemp4 = ParseMdElement(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                indexTemp4 = ParseMcElement(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                indexTemp4 = ParseMvElement(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                index = indexStart2; break;
              }
            } while (false);
            if (index == indexStart2) {
              break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderX400ContentIdentifier(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseNoEncodedWords(str, index, endIndex, tokener);
    }

    public static int ParseHeaderX400ContentReturn(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMixerKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderX400MtsIdentifier(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseNoEncodedWords(str, index, endIndex, tokener);
    }

    public static int ParseHeaderX400Originator(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMailbox(str, index, endIndex, tokener);
    }

    public static int ParseHeaderX400Received(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseNoEncodedWords(str, index, endIndex, tokener);
    }

    public static int ParseHeaderX400Recipients(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseMailboxList(str, index, endIndex, tokener);
    }

    public static int ParseHeaderXArchivedAt(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <= 59) ||
          (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index) <=
          126))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <=
            59) || (str.charAt(index) == 61) || (str.charAt(index) >= 63 && str.charAt(index)
            <= 126))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseHeaderXRicevuta(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseGeneralKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderXTiporicevuta(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseGeneralKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderXTrasporto(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseGeneralKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderXVerificasicurezza(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseGeneralKeyword(str, index, endIndex, tokener);
    }

    public static int ParseHeaderXref(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        tx2 = ParsePathIdentity(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            for (i2 = 0; ; ++i2) {
              indexTemp3 = ParseFWS(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 1) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            tx3 = ParseNewsgroupName(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            if (index < endIndex && (str.charAt(index) == 58)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <=
              39) || (str.charAt(index) >= 41 && str.charAt(index) <= 58) ||
              (str.charAt(index) >= 60 && str.charAt(index) <= 126))) {
              ++index;
              while (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index)
                <= 39) || (str.charAt(index) >= 41 && str.charAt(index) <= 58) ||
                (str.charAt(index) >= 60 && str.charAt(index) <= 126))) {
                ++index;
              }
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseIdLeft(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseLocalPart(str, index, endIndex, tokener);
    }

    public static int ParseIdRight(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseDomain(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseNoFoldLiteral(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseKey(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
          ++index;
        } else {
          break;
        }
        while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
          90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index)
          >= 48 && str.charAt(index) <= 57) || (str.charAt(index) == 95) || (str.charAt(index)
          >= 45 && str.charAt(index) <= 46))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseKeyValueList(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseKeyValuePair(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseKeyValuePair(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseKeyValuePair(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, indexTemp3, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseKey(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 61)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = ParseDotAtom(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = ParseQuotedString(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseLabel(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp, indexTemp2;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57))) {
          ++index;
        } else {
          break;
        }
        while (true) {
          indexTemp2 = index;
          do {
            if (index + 1 < endIndex && ((str.charAt(index) == 45) && ((str.charAt(index +
              1) >= 65 && str.charAt(index + 1) <= 90) || (str.charAt(index + 1) >= 97 &&
              str.charAt(index + 1) <= 122) || (str.charAt(index + 1) >= 48 &&
              str.charAt(index + 1) <= 57)))) {
              indexTemp2 += 2; break;
            }
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 57))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseLanguageDescription(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParsePrintablestring(str, index, endIndex, tokener);
    }

    public static int ParseLanguageList(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseLanguageTag(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseLanguageTag(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseLanguageQ(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseLanguageRange(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
if (index + 1 < endIndex && (str.charAt(index) & ~32) == 81 && str.charAt(index + 1) ==
              61) {
              index += 2;
            } else {
              index = indexStart2; break;
            }
            tx3 = ParseQvalue(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseLanguageRange(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i2, indexStart2, indexTemp, indexTemp2;
      indexTemp = index;
      do {
        indexTemp2 = index;
        do {
          indexStart2 = index;
          for (i2 = 0; i2 < 8; ++i2) {
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
              ++index;
            } else if (i2 < 1) {
              index = indexStart2; break;
            } else {
 break;
}
          }
          if (index == indexStart2) {
 break;
}
          while ((index + 1 < endIndex && ((str.charAt(index) == 45) &&
            ((str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 90) || (str.charAt(index +
            1) >= 97 && str.charAt(index + 1) <= 122) || (str.charAt(index + 1) >= 48 &&
            str.charAt(index + 1) <= 57))))) {
            index += 2;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (index < endIndex && (str.charAt(index) == 42)) {
          ++indexTemp; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseLanguageTag(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
          ++index;
        } else {
          break;
        }
        while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
          90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index)
          >= 48 && str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseLaxHeaderTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, indexTemp3, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = ParseAddressList(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            indexTemp3 = ParseCFWS(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseLdhStr(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp, indexTemp2;
      indexTemp = index;
      do {
        while (true) {
          indexTemp2 = index;
          do {
            if (index + 1 < endIndex && ((str.charAt(index) == 45) && ((str.charAt(index +
              1) >= 65 && str.charAt(index + 1) <= 90) || (str.charAt(index + 1) >= 97 &&
              str.charAt(index + 1) <= 122) || (str.charAt(index + 1) >= 48 &&
              str.charAt(index + 1) <= 57)))) {
              indexTemp2 += 2; break;
            }
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 57))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseLocalPart(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseWord(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 46)) {
              ++index;
            } else {
              break;
            }
            tx3 = ParseWord(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(8, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParseLocalPartNoCfws(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart4, indexTemp, indexTemp2,
        indexTemp3, indexTemp4, indexTemp5, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseDotAtomText(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) == 34)) {
            ++index;
          } else {
            break;
          }
          while (true) {
            indexTemp3 = index;
            do {
           if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
                9))) {
                ++indexTemp3; break;
              }
              if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
                35 && str.charAt(index) <= 91) || (str.charAt(index) >= 93 && str.charAt(index)
                <= 126))) {
                ++indexTemp3; break;
              }
              indexTemp4 = index;
              do {
                indexStart4 = index;
                if (index < endIndex && (str.charAt(index) == 92)) {
                  ++index;
                }
                do {
                  indexTemp5 = index;
                  do {
                    if (index < endIndex && ((str.charAt(index) >= 128 &&
                    str.charAt(index) <= 55295) || (str.charAt(index) >= 57344 &&
                    str.charAt(index) <= 65535))) {
                    ++indexTemp5; break;
                    }
                    if (index + 1 < endIndex && ((str.charAt(index) >= 55296 &&
                    str.charAt(index) <= 56319) && (str.charAt(index + 1) >= 56320 &&
                    str.charAt(index + 1) <= 57343))) {
                    indexTemp5 += 2; break;
                    }
                  } while (false);
                  if (indexTemp5 != index) {
                    index = indexTemp5;
                  } else {
                    index = indexStart4; break;
                  }
                } while (false);
                if (index == indexStart4) {
                  break;
                }
                indexTemp4 = index;
                index = indexStart4;
              } while (false);
              if (indexTemp4 != index) {
                indexTemp3 = indexTemp4; break;
              }
              if (index + 1 < endIndex && ((str.charAt(index) == 92) &&
                ((str.charAt(index + 1) >= 32 && str.charAt(index + 1) <= 126) ||
                (str.charAt(index + 1) == 9)))) {
                indexTemp3 += 2; break;
              }
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
 break;
}
          }
          if (index < endIndex && (str.charAt(index) == 34)) {
            ++index;
          } else {
            index = indexStart2; break;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMailbox(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseNameAddr(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseAddrSpec(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(6, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParseMailboxList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        indexTemp4, state, state2, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        tx2 = ParseMailbox(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            do {
              indexTemp3 = index;
              do {
                indexTemp4 = ParseMailbox(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                indexTemp4 = ParseCFWS(str, index, endIndex, tokener);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                break;
              }
            } while (false);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMcElement(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 2 < endIndex && (str.charAt(index) & ~32) == 77 && (str.charAt(index +
          1) & ~32) == 67 && str.charAt(index + 2) == 61) {
          index += 3;
        } else {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseTypeString(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMdElement(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 2 < endIndex && (str.charAt(index) & ~32) == 77 && (str.charAt(index +
          1) & ~32) == 68 && str.charAt(index + 2) == 61) {
          index += 3;
        } else {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseDomainName(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMessageTypeParam(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 9 < endIndex && (str.charAt(index) & ~32) == 73 && (str.charAt(index +
          1) & ~32) == 68 && (str.charAt(index + 2) & ~32) == 69 && (str.charAt(index + 3) & ~32) == 78 && (str.charAt(index + 4) & ~32) == 84 && (str.charAt(index + 5) & ~32) == 73 && (str.charAt(index + 6) & ~32) == 70 && (str.charAt(index + 7) & ~32) == 73 && (str.charAt(index + 8) & ~32) == 69 && (str.charAt(index + 9) & ~32) == 82) {
          index += 10;
        } else {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 61)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseQuotedMilitaryString(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMethod(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          indexTemp2 = ParseLdhStr(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 47)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseMethodVersion(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMethodVersion(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
          while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          }
        } else {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMethodspec(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseMethod(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 61)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseResult(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMilitaryString(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2;
      indexStart = index;
      indexTemp = index;
      do {
        for (i = 0; i < 69; ++i) {
          indexTemp2 = index;
          do {
          if (index < endIndex && (str.charAt(index) >= 40 && str.charAt(index) <=
              41)) {
              ++indexTemp2; break;
            }
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
              (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) ==
              32) || (str.charAt(index) == 39) || (str.charAt(index) >= 43 && str.charAt(index)
              <= 58) || (str.charAt(index) == 61) || (str.charAt(index) == 63))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseMilitaryStringSequence(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; i < 69; ++i) {
          indexTemp2 = ParsePsChar(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            for (i2 = 0; i2 < 69; ++i2) {
              indexTemp3 = ParsePsChar(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 1) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMixerKeyword(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) ==
            45))) {
            ++index;
          }
        } else {
          index = indexStart; break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMsgId(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 60)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseIdLeft(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 64)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseIdRight(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 62)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseMvElement(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 2 < endIndex && (str.charAt(index) & ~32) == 77 && (str.charAt(index +
          1) & ~32) == 86 && str.charAt(index + 2) == 61) {
          index += 3;
        } else {
          break;
        }
        index = ParseFWS(str, index, endIndex, tokener);
        tx2 = ParseCertifierList(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseNameAddr(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseDisplayName(str, index, endIndex, tokener);
        tx2 = ParseAngleAddr(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseNewsgroupList(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        tx2 = ParseNewsgroupName(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseNewsgroupName(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
      while (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) ==
          9))) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseNewsgroupName(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart2, indexTemp, indexTemp2;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 43) || (str.charAt(index) == 45) ||
          (str.charAt(index) == 95))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
            90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
            (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) == 43) ||
            (str.charAt(index) == 45) || (str.charAt(index) == 95))) {
            ++index;
          }
        } else {
          break;
        }
        while (true) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 46)) {
              ++index;
            } else {
              break;
            }
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) == 43) ||
              (str.charAt(index) == 45) || (str.charAt(index) == 95))) {
              ++index;
              while (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index)
                <= 90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
                (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) ==
                43) || (str.charAt(index) == 45) || (str.charAt(index) == 95))) {
                ++index;
              }
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseNoEncodedWords(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseObsUnstruct(str, index, endIndex, tokener);
    }

    public static int ParseNoFoldLiteral(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) == 91)) {
          ++index;
        } else {
          break;
        }
        while (true) {
          indexTemp2 = ParseDtext(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        if (index < endIndex && (str.charAt(index) == 93)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseNoResult(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 78 && (str.charAt(index +
          1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 78 && (str.charAt(index + 3) & ~32) == 69) {
          index += 4;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseNodeid(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp, indexTemp2;
      indexTemp = index;
      do {
        while (true) {
          indexTemp2 = index;
          do {
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 45 &&
              str.charAt(index) <= 46) || (str.charAt(index) == 95) || (str.charAt(index) ==
              126))) {
              ++indexTemp2; break;
            }
            if (index + 2 < endIndex && (((str.charAt(index) == 37) && (((str.charAt(index +
              1) >= 48 && str.charAt(index + 1) <= 57) || (str.charAt(index + 1) >= 65 &&
              str.charAt(index + 1) <= 70) || (str.charAt(index + 1) >= 97 && str.charAt(index +
              1) <= 102)) && ((str.charAt(index + 2) >= 48 && str.charAt(index + 2) <=
              57) || (str.charAt(index + 2) >= 65 && str.charAt(index + 2) <= 70) ||
              (str.charAt(index + 2) >= 97 && str.charAt(index + 2) <= 102)))))) {
              indexTemp2 += 3; break;
            }
            if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) ==
              36) || (str.charAt(index) >= 40 && str.charAt(index) <= 44) || (str.charAt(index)
              == 59) || (str.charAt(index) == 61))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseNonnegInteger(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart2, indexTemp, indexTemp2;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) == 48)) {
          ++indexTemp; break;
        }
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) >= 49 && str.charAt(index) <= 57)) {
            ++index;
          } else {
            break;
          }
          while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
            ++index;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseObsAcceptLanguage(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseObsLanguageQ(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseObsLanguageQ(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseObsDomainList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart3, indexTemp, indexTemp2,
        indexTemp3, state, state2, tx2, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexTemp3 = ParseCFWS(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        if (index < endIndex && (str.charAt(index) == 64)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseDomain(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            do {
              indexTemp3 = index;
              do {
                indexStart3 = index;
                if (index < endIndex && (str.charAt(index) == 64)) {
                  ++index;
                } else {
                  break;
                }
                tx4 = ParseDomain(str, index, endIndex, tokener);
                if (tx4 == index) {
                  index = indexStart3; break;
                } else {
                  index = tx4;
                }
                indexTemp3 = index;
                index = indexStart3;
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                break;
              }
            } while (false);
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseObsGroupList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexStart2, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 44)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseObsLanguageQ(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseLanguageRange(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
         if (index < endIndex && ((str.charAt(index) == 81) || (str.charAt(index) ==
              113))) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 61)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            tx3 = ParseQvalue(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseObsRoute(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseObsDomainList(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        if (index < endIndex && (str.charAt(index) == 58)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseObsUnstruct(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i3, i4, indexStart, indexStart3, indexStart4, indexTemp,
        indexTemp2, indexTemp3, indexTemp4, indexTemp5, state, state2,
        state3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            state3 = (tokener != null) ? tokener.GetState() : 0;
            indexTemp3 = index;
            do {
              indexStart3 = index;
              while (index < endIndex && (str.charAt(index) == 13)) {
                ++index;
              }
              for (i3 = 0; ; ++i3) {
                indexTemp4 = index;
                do {
                  indexTemp5 = index;
                  do {
                    if (index < endIndex && ((str.charAt(index) == 0) ||
                    (str.charAt(index) >= 1 && str.charAt(index) <= 8) || (str.charAt(index) >=
                    11 && str.charAt(index) <= 12) || (str.charAt(index) >= 14 &&
                    str.charAt(index) <= 31) || (str.charAt(index) == 127) ||
                    (str.charAt(index) >= 33 && str.charAt(index) <= 126) || (str.charAt(index)
                    >= 128 && str.charAt(index) <= 55295) || (str.charAt(index) >= 57344 &&
                    str.charAt(index) <= 65535))) {
                    ++indexTemp5; break;
                    }
                    if (index + 1 < endIndex && ((str.charAt(index) >= 55296 &&
                    str.charAt(index) <= 56319) && (str.charAt(index + 1) >= 56320 &&
                    str.charAt(index + 1) <= 57343))) {
                    indexTemp5 += 2; break;
                    }
                  } while (false);
                  if (indexTemp5 != index) {
                    indexTemp4 = indexTemp5; break;
                  }
                  indexStart4 = index;
                  for (i4 = 0; ; ++i4) {
                    indexTemp5 = ParseFWS(str, index, endIndex, tokener);
                    if (indexTemp5 == index) {
                    if (i4 < 1) {
                    indexTemp4 = indexStart4;
                    }
                    break;
                    } else {
 index = indexTemp5;
}
                  }
                  index = indexStart4;
                  if (indexTemp5 != indexStart4) {
                    indexTemp4 = indexTemp5; break;
                  }
                } while (false);
                if (indexTemp4 != index) {
                  index = indexTemp4;
                } else {
                  if (i3 < 1) {
                    index = indexStart3;
                  }
                  break;
                }
              }
              if (index == indexStart3) {
                break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (tokener != null) {
 tokener.RestoreState(state3);
}
            if (index < endIndex && (str.charAt(index) == 10)) {
              ++indexTemp2;
              while (indexTemp2 < endIndex && (str.charAt(indexTemp2) == 10)) {
                ++indexTemp2;
              }
              break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        while (index < endIndex && (str.charAt(index) == 13)) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseOptParameterList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            tx3 = ParseParameter(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseOtherSections(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index + 1 < endIndex && (str.charAt(index) == 42) && (str.charAt(index + 1)
          >= 49 && str.charAt(index + 1) <= 57)) {
          index += 2;
        } else {
          break;
        }
        while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseParameter(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart3, indexStart4, indexTemp, indexTemp2,
        indexTemp3, indexTemp4, indexTemp5, state, state3, tx5;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            indexTemp3 = ParseRegularParameter(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            state3 = (tokener != null) ? tokener.GetState() : 0;
            indexTemp3 = index;
            do {
              indexStart3 = index;
              do {
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  if (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) || (str.charAt(index)
                    == 38) || (str.charAt(index) == 43) || (str.charAt(index) >= 45 &&
                    str.charAt(index) <= 46) || (str.charAt(index) >= 48 && str.charAt(index)
                    <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                    (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                    ++index;
                    while (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) ||
                    (str.charAt(index) == 38) || (str.charAt(index) == 43) ||
                    (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
                    (str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
                    (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                    (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                    ++index;
                    }
                  } else {
                    break;
                  }
        if (index + 1 < endIndex && str.charAt(index) == 42 && str.charAt(index + 1) ==
                    48) {
                    index += 2;
                  }
                  if (index < endIndex && (str.charAt(index) == 42)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  index = indexTemp4;
                } else {
                  index = indexStart3; break;
                }
              } while (false);
              if (index == indexStart3) {
                break;
              }
              index = ParseCFWS(str, index, endIndex, tokener);
              if (index < endIndex && (str.charAt(index) == 61)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              index = ParseCFWS(str, index, endIndex, tokener);
              do {
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  index = ParseCharset(str, index, endIndex, tokener);
                  if (index < endIndex && (str.charAt(index) == 39)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  index = ParseLanguageTag(str, index, endIndex, tokener);
                  if (index < endIndex && (str.charAt(index) == 39)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  while (true) {
                    indexTemp5 = index;
                    do {
                    if (index + 2 < endIndex && (((str.charAt(index) == 37) &&
                    (((str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57) ||
                    (str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 70) ||
                    (str.charAt(index + 1) >= 97 && str.charAt(index + 1) <= 102)) &&
                    ((str.charAt(index + 2) >= 48 && str.charAt(index + 2) <= 57) ||
                    (str.charAt(index + 2) >= 65 && str.charAt(index + 2) <= 70) ||
                    (str.charAt(index + 2) >= 97 && str.charAt(index + 2) <= 102)))))) {
                    indexTemp5 += 3; break;
                    }
                    if (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) ||
                    (str.charAt(index) == 38) || (str.charAt(index) == 43) ||
                    (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
                    (str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
                    (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                    (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                    ++indexTemp5; break;
                    }
                    } while (false);
                    if (indexTemp5 != index) {
                    index = indexTemp5;
                    } else {
 break;
}
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  index = indexTemp4;
                } else {
                  index = indexStart3; break;
                }
              } while (false);
              if (index == indexStart3) {
                break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (tokener != null) {
 tokener.RestoreState(state3);
}
            state3 = (tokener != null) ? tokener.GetState() : 0;
            indexTemp3 = index;
            do {
              indexStart3 = index;
              do {
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  if (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) || (str.charAt(index)
                    == 38) || (str.charAt(index) == 43) || (str.charAt(index) >= 45 &&
                    str.charAt(index) <= 46) || (str.charAt(index) >= 48 && str.charAt(index)
                    <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                    (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                    ++index;
                    while (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) ||
                    (str.charAt(index) == 38) || (str.charAt(index) == 43) ||
                    (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
                    (str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
                    (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                    (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                    ++index;
                    }
                  } else {
                    break;
                  }
                  tx5 = ParseOtherSections(str, index, endIndex, tokener);
                  if (tx5 == index) {
                    index = indexStart4; break;
                  } else {
                    index = tx5;
                  }
                  if (index < endIndex && (str.charAt(index) == 42)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  index = indexTemp4;
                } else {
                  index = indexStart3; break;
                }
              } while (false);
              if (index == indexStart3) {
                break;
              }
              if (index < endIndex && (str.charAt(index) == 61)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              while (true) {
                indexTemp4 = index;
                do {
                  if (index + 2 < endIndex && (((str.charAt(index) == 37) &&
                    (((str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57) ||
                    (str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 70) ||
                    (str.charAt(index + 1) >= 97 && str.charAt(index + 1) <= 102)) &&
                    ((str.charAt(index + 2) >= 48 && str.charAt(index + 2) <= 57) ||
                    (str.charAt(index + 2) >= 65 && str.charAt(index + 2) <= 70) ||
                    (str.charAt(index + 2) >= 97 && str.charAt(index + 2) <= 102)))))) {
                    indexTemp4 += 3; break;
                  }
                  if (index < endIndex && ((str.charAt(index) == 33) ||
                    (str.charAt(index) >= 35 && str.charAt(index) <= 36) || (str.charAt(index)
                    == 38) || (str.charAt(index) == 43) || (str.charAt(index) >= 45 &&
                    str.charAt(index) <= 46) || (str.charAt(index) >= 48 && str.charAt(index)
                    <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
                    (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
                    ++indexTemp4; break;
                  }
                } while (false);
                if (indexTemp4 != index) {
                  index = indexTemp4;
                } else {
 break;
}
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (tokener != null) {
 tokener.RestoreState(state3);
}
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePath(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseAngleAddr(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          if (index < endIndex && (str.charAt(index) == 60)) {
            ++index;
          } else {
            index = indexStart2; break;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          if (index < endIndex && (str.charAt(index) == 62)) {
            ++index;
          } else {
            index = indexStart2; break;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePathIdentity(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i2, i4, indexStart, indexStart2, indexStart3, indexStart4,
        indexTemp, indexTemp2, indexTemp3, indexTemp4, indexTemp5, state,
        state2, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          for (i2 = 0; ; ++i2) {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              tx4 = ParseLabel(str, index, endIndex, tokener);
              if (tx4 == index) {
                break;
              } else {
                index = tx4;
              }
              if (index < endIndex && (str.charAt(index) == 46)) {
                ++index;
              } else {
                index = indexStart3; break;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              if (i2 < 1) {
                index = indexStart2;
              }
              break;
            }
          }
          if (index == indexStart2) {
            break;
          }
          do {
            indexTemp3 = index;
            do {
              indexTemp4 = index;
              do {
                indexStart4 = index;
                if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
                  90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
                  ++index;
                } else {
                  break;
                }
                for (i4 = 0; ; ++i4) {
                  indexTemp5 = index;
                  do {
                    if (index + 1 < endIndex && ((str.charAt(index) == 45) &&
                    ((str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 90) ||
                    (str.charAt(index + 1) >= 97 && str.charAt(index + 1) <= 122) ||
                    (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57)))) {
                    indexTemp5 += 2; break;
                    }
                    if (index < endIndex && ((str.charAt(index) >= 65 &&
                    str.charAt(index) <= 90) || (str.charAt(index) >= 97 && str.charAt(index)
                    <= 122) || (str.charAt(index) >= 48 && str.charAt(index) <= 57))) {
                    ++indexTemp5; break;
                    }
                  } while (false);
                  if (indexTemp5 != index) {
                    index = indexTemp5;
                  } else {
                    if (i4 < 1) {
                    index = indexStart4;
                    }
                    break;
                  }
                }
                if (index == indexStart4) {
                  break;
                }
                indexTemp4 = index;
                index = indexStart4;
              } while (false);
              if (indexTemp4 != index) {
                indexTemp3 = indexTemp4; break;
              }
              indexTemp4 = index;
              do {
                indexStart4 = index;
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                  57)) {
                  ++index;
                } else {
                  break;
                }
                while (index < endIndex && ((str.charAt(index) >= 48 &&
                  str.charAt(index) <= 57) || (str.charAt(index) == 45))) {
                  ++index;
                }
                if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
                  90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
                  ++index;
                } else {
                  index = indexStart4; break;
                }
                while (true) {
                  indexTemp5 = index;
                  do {
                    if (index + 1 < endIndex && ((str.charAt(index) == 45) &&
                    ((str.charAt(index + 1) >= 65 && str.charAt(index + 1) <= 90) ||
                    (str.charAt(index + 1) >= 97 && str.charAt(index + 1) <= 122) ||
                    (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57)))) {
                    indexTemp5 += 2; break;
                    }
                    if (index < endIndex && ((str.charAt(index) >= 65 &&
                    str.charAt(index) <= 90) || (str.charAt(index) >= 97 && str.charAt(index)
                    <= 122) || (str.charAt(index) >= 48 && str.charAt(index) <= 57))) {
                    ++indexTemp5; break;
                    }
                  } while (false);
                  if (indexTemp5 != index) {
                    index = indexTemp5;
                  } else {
 break;
}
                }
                indexTemp4 = index;
                index = indexStart4;
              } while (false);
              if (indexTemp4 != index) {
                indexTemp3 = indexTemp4; break;
              }
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              index = indexStart2; break;
            }
          } while (false);
          if (index == indexStart2) {
            break;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) == 45) || (str.charAt(index) ==
          95))) {
          ++indexTemp;
          while (indexTemp < endIndex && ((str.charAt(indexTemp) >= 65 &&
            str.charAt(indexTemp) <= 90) || (str.charAt(indexTemp) >= 97 &&
            str.charAt(indexTemp) <= 122) || (str.charAt(indexTemp) >= 48 &&
            str.charAt(indexTemp) <= 57) || (str.charAt(indexTemp) == 45) ||
            (str.charAt(indexTemp) == 95))) {
            ++indexTemp;
          }
          break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePathList(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexStart4, indexTemp, indexTemp2,
        indexTemp3, indexTemp4, state, state2, state4, tx3, tx5;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            tx3 = ParsePathIdentity(str, index, endIndex, tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            do {
              indexTemp3 = index;
              do {
                state4 = (tokener != null) ? tokener.GetState() : 0;
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  tx5 = ParseDiagOther(str, index, endIndex, tokener);
                  if (tx5 == index) {
                    break;
                  } else {
                    index = tx5;
                  }
                  if (index < endIndex && (str.charAt(index) == 33)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                if (tokener != null) {
 tokener.RestoreState(state4);
}
                state4 = (tokener != null) ? tokener.GetState() : 0;
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  tx5 = ParseDiagDeprecated(str, index, endIndex, tokener);
                  if (tx5 == index) {
                    break;
                  } else {
                    index = tx5;
                  }
                  if (index < endIndex && (str.charAt(index) == 33)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  indexTemp3 = indexTemp4; break;
                }
                if (tokener != null) {
 tokener.RestoreState(state4);
}
        if (index + 1 < endIndex && str.charAt(index) == 33 && str.charAt(index + 1) ==
                  33) {
                  indexTemp3 += 2; break;
                }
                if (index < endIndex && (str.charAt(index) == 33)) {
                  ++indexTemp3; break;
                }
              } while (false);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                index = indexStart2; break;
              }
            } while (false);
            if (index == indexStart2) {
              break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePathxmpp(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            while (true) {
              indexTemp3 = ParseNodeid(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
 break;
}
            }
            if (index < endIndex && (str.charAt(index) == 64)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        while (true) {
          indexTemp2 = ParseRegName(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index < endIndex && (str.charAt(index) == 47)) {
              ++index;
            } else {
              break;
            }
            while (true) {
              indexTemp3 = ParseResid(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
 break;
}
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePhrase(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParsePhraseWord(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        while (true) {
          indexTemp2 = ParsePhraseWordOrDot(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(1, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParsePhraseAtom(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, indexTemp3, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; ; ++i) {
          indexTemp2 = index;
          do {
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
              ++indexTemp2; break;
            }
            if (index < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
              (str.charAt(index) == 33) || (str.charAt(index) == 35) || (str.charAt(index) ==
              36) || (str.charAt(index) == 37) || (str.charAt(index) == 38) || (str.charAt(index)
              == 39) || (str.charAt(index) == 42) || (str.charAt(index) == 43) ||
              (str.charAt(index) == 45) || (str.charAt(index) == 47) || (str.charAt(index) == 61) ||
              (str.charAt(index) == 63) || (str.charAt(index) == 94) || (str.charAt(index) ==
              95) || (str.charAt(index) == 96) || (str.charAt(index) == 123) ||
              (str.charAt(index) == 124) || (str.charAt(index) == 125) || (str.charAt(index) ==
              126))) {
              ++indexTemp2; break;
            }
            indexTemp3 = index;
            do {
              if (index < endIndex && ((str.charAt(index) >= 128 && str.charAt(index) <=
                55295) || (str.charAt(index) >= 57344 && str.charAt(index) <= 65535))) {
                ++indexTemp3; break;
              }
              if (index + 1 < endIndex && ((str.charAt(index) >= 55296 &&
                str.charAt(index) <= 56319) && (str.charAt(index + 1) >= 56320 &&
                str.charAt(index + 1) <= 57343))) {
                indexTemp3 += 2; break;
              }
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(3, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParsePhraseAtomOrDot(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = index;
        for (i = 0; ; ++i) {
          indexTemp2 = ParseAtext(str, index, endIndex, tokener);
          if (indexTemp2 == index) {
            if (i < 1) {
              indexTemp = indexStart;
            }
            break;
          } else {
 index = indexTemp2;
}
        }
        index = indexStart;
        if (indexTemp2 != indexStart) {
          indexTemp = indexTemp2; break;
        }
        if (index < endIndex && (str.charAt(index) == 46)) {
          ++indexTemp; break;
        }
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(4, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParsePhraseWord(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          tx3 = ParsePhraseAtom(str, index, endIndex, tokener);
          if (tx3 == index) {
            index = indexStart2; break;
          } else {
            index = tx3;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        indexTemp2 = ParseQuotedString(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePhraseWordOrDot(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          tx3 = ParsePhraseAtomOrDot(str, index, endIndex, tokener);
          if (tx3 == index) {
            index = indexStart2; break;
          } else {
            index = tx3;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        indexTemp2 = ParseQuotedString(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePrecedence(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart3, indexTemp, indexTemp2, indexTemp3, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        do {
          indexTemp2 = index;
          do {
            if (index < endIndex && (str.charAt(index) == 48)) {
              ++indexTemp2; break;
            }
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) >= 49 && str.charAt(index) <= 57)) {
                ++index;
              } else {
                break;
              }
           while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                57)) {
                ++index;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (index + 7 < endIndex && (str.charAt(index) & ~32) == 68 &&
              (str.charAt(index + 1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 70 &&
              (str.charAt(index + 3) & ~32) == 69 && (str.charAt(index + 4) & ~32) ==
              82 && (str.charAt(index + 5) & ~32) == 82 && (str.charAt(index + 6) & ~32)
              == 69 && (str.charAt(index + 7) & ~32) == 68) {
              indexTemp2 += 8; break;
            }
            if (index + 6 < endIndex && (str.charAt(index) & ~32) == 82 &&
              (str.charAt(index + 1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 85 &&
              (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) ==
              73 && (str.charAt(index + 5) & ~32) == 78 && (str.charAt(index + 6) & ~32)
              == 69) {
              indexTemp2 += 7; break;
            }
            if (index + 7 < endIndex && (str.charAt(index) & ~32) == 80 &&
              (str.charAt(index + 1) & ~32) == 82 && (str.charAt(index + 2) & ~32) == 73 &&
              (str.charAt(index + 3) & ~32) == 79 && (str.charAt(index + 4) & ~32) ==
              82 && (str.charAt(index + 5) & ~32) == 73 && (str.charAt(index + 6) & ~32)
              == 84 && (str.charAt(index + 7) & ~32) == 89) {
              indexTemp2 += 8; break;
            }
            if (index + 8 < endIndex && (str.charAt(index) & ~32) == 73 &&
              (str.charAt(index + 1) & ~32) == 77 && (str.charAt(index + 2) & ~32) == 77 &&
              (str.charAt(index + 3) & ~32) == 69 && (str.charAt(index + 4) & ~32) ==
              68 && (str.charAt(index + 5) & ~32) == 73 && (str.charAt(index + 6) & ~32)
       == 65 && (str.charAt(index + 7) & ~32) == 84 && (str.charAt(index + 8) & ~32) ==
                69) {
              indexTemp2 += 9; break;
            }
            if (index + 4 < endIndex && (str.charAt(index) & ~32) == 70 &&
              (str.charAt(index + 1) & ~32) == 76 && (str.charAt(index + 2) & ~32) == 65 &&
              (str.charAt(index + 3) & ~32) == 83 && (str.charAt(index + 4) & ~32) ==
              72) {
              indexTemp2 += 5; break;
            }
            if (index + 7 < endIndex && (str.charAt(index) & ~32) == 79 &&
              (str.charAt(index + 1) & ~32) == 86 && (str.charAt(index + 2) & ~32) == 69 &&
              (str.charAt(index + 3) & ~32) == 82 && (str.charAt(index + 4) & ~32) ==
              82 && (str.charAt(index + 5) & ~32) == 73 && (str.charAt(index + 6) & ~32)
              == 68 && (str.charAt(index + 7) & ~32) == 69) {
              indexTemp2 += 8; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePrintablestring(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp, indexTemp2;
      indexTemp = index;
      do {
        while (true) {
          indexTemp2 = index;
          do {
          if (index < endIndex && (str.charAt(index) >= 40 && str.charAt(index) <=
              41)) {
              ++indexTemp2; break;
            }
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
              (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) ==
              32) || (str.charAt(index) == 39) || (str.charAt(index) >= 43 && str.charAt(index)
              <= 58) || (str.charAt(index) == 61) || (str.charAt(index) == 63))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseProperty(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index + 7 < endIndex && (str.charAt(index) & ~32) == 77 && (str.charAt(index +
          1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 73 && (str.charAt(index + 3) & ~32) == 76 && (str.charAt(index + 4) & ~32) == 70 && (str.charAt(index + 5) & ~32) == 82 && (str.charAt(index + 6) & ~32) == 79 && (str.charAt(index + 7) & ~32) == 77) {
          indexTemp += 8; break;
        }
        if (index + 5 < endIndex && (str.charAt(index) & ~32) == 82 && (str.charAt(index +
          1) & ~32) == 67 && (str.charAt(index + 2) & ~32) == 80 && (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) == 84 && (str.charAt(index + 5) & ~32) == 79) {
          indexTemp += 6; break;
        }
        // Unlimited production in choice
      } while (false);
      return indexTemp;
    }

    public static int ParsePropspec(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParsePtype(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 46)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseProperty(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 61)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParsePvalue(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParsePsChar(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) >= 40 && str.charAt(index) <= 41)) {
          ++indexTemp; break;
        }
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) == 32) ||
          (str.charAt(index) == 39) || (str.charAt(index) >= 43 && str.charAt(index) <= 58) ||
          (str.charAt(index) == 61) || (str.charAt(index) == 63))) {
          ++indexTemp; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParsePtype(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 83 && (str.charAt(index +
          1) & ~32) == 77 && (str.charAt(index + 2) & ~32) == 84 && (str.charAt(index + 3) & ~32) == 80) {
          indexTemp += 4; break;
        }
        if (index + 5 < endIndex && (str.charAt(index) & ~32) == 72 && (str.charAt(index +
          1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 65 && (str.charAt(index + 3) & ~32) == 68 && (str.charAt(index + 4) & ~32) == 69 && (str.charAt(index + 5) & ~32) == 82) {
          indexTemp += 6; break;
        }
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 66 && (str.charAt(index +
          1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 68 && (str.charAt(index + 3) & ~32) == 89) {
          indexTemp += 4; break;
        }
        if (index + 5 < endIndex && (str.charAt(index) & ~32) == 80 && (str.charAt(index +
          1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 76 && (str.charAt(index + 3) & ~32) == 73 && (str.charAt(index + 4) & ~32) == 67 && (str.charAt(index + 5) & ~32) == 89) {
          indexTemp += 6; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParsePvalue(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart3, indexStart4, indexTemp, indexTemp2,
        indexTemp3, indexTemp4, state, state3, tx4;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        do {
          indexTemp2 = index;
          do {
            if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
              35 && str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index)
              <= 46) || (str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
              (str.charAt(index) >= 65 && str.charAt(index) <= 90) || (str.charAt(index) >= 94 &&
              str.charAt(index) <= 126) || (str.charAt(index) >= 42 && str.charAt(index) <=
              43) || (str.charAt(index) >= 38 && str.charAt(index) <= 39) ||
              (str.charAt(index) == 63))) {
              ++indexTemp2;
              while (indexTemp2 < endIndex && ((str.charAt(indexTemp2) == 33) ||
                (str.charAt(indexTemp2) >= 35 && str.charAt(indexTemp2) <= 36) ||
                (str.charAt(indexTemp2) >= 45 && str.charAt(indexTemp2) <= 46) ||
                (str.charAt(indexTemp2) >= 48 && str.charAt(indexTemp2) <= 57) ||
                (str.charAt(indexTemp2) >= 65 && str.charAt(indexTemp2) <= 90) ||
                (str.charAt(indexTemp2) >= 94 && str.charAt(indexTemp2) <= 126) ||
                (str.charAt(indexTemp2) >= 42 && str.charAt(indexTemp2) <= 43) ||
                (str.charAt(indexTemp2) >= 38 && str.charAt(indexTemp2) <= 39) ||
                (str.charAt(indexTemp2) == 63))) {
                ++indexTemp2;
              }
              break;
            }
            indexTemp3 = ParseQuotedString(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            state3 = (tokener != null) ? tokener.GetState() : 0;
            indexTemp3 = index;
            do {
              indexStart3 = index;
              do {
                indexTemp4 = index;
                do {
                  indexStart4 = index;
                  index = ParseLocalPart(str, index, endIndex, tokener);
                  if (index < endIndex && (str.charAt(index) == 64)) {
                    ++index;
                  } else {
                    index = indexStart4; break;
                  }
                  indexTemp4 = index;
                  index = indexStart4;
                } while (false);
                if (indexTemp4 != index) {
                  index = indexTemp4;
                } else {
                  break;
                }
              } while (false);
              tx4 = ParseDomainName(str, index, endIndex, tokener);
              if (tx4 == index) {
                index = indexStart3; break;
              } else {
                index = tx4;
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              indexTemp2 = indexTemp3; break;
            }
            if (tokener != null) {
 tokener.RestoreState(state3);
}
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseQcontent(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 91) || (str.charAt(index) >= 93 && str.charAt(index) <= 126) ||
          (str.charAt(index) >= 1 && str.charAt(index) <= 8) || (str.charAt(index) >= 11 &&
          str.charAt(index) <= 12) || (str.charAt(index) >= 14 && str.charAt(index) <= 31) ||
          (str.charAt(index) == 127) || (str.charAt(index) >= 128 && str.charAt(index) <= 55295) ||
          (str.charAt(index) >= 57344 && str.charAt(index) <= 65535))) {
          ++indexTemp; break;
        }
        if (index + 1 < endIndex && ((str.charAt(index) >= 55296 && str.charAt(index) <=
          56319) && (str.charAt(index + 1) >= 56320 && str.charAt(index + 1) <= 57343))) {
          indexTemp += 2; break;
        }
        indexTemp2 = ParseQuotedPair(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseQuotedMilitaryString(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) == 34)) {
          ++index;
        } else {
          break;
        }
        for (i = 0; i < 69; ++i) {
          indexTemp2 = ParsePsChar(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 1) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        if (index < endIndex && (str.charAt(index) == 34)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseQuotedPair(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2;
      indexStart = index;
      indexTemp = index;
      do {
        if (index < endIndex && (str.charAt(index) == 92)) {
          ++index;
        } else {
          break;
        }
        do {
          indexTemp2 = index;
          do {
            if (index < endIndex && ((str.charAt(index) >= 33 && str.charAt(index) <= 126) ||
              (str.charAt(index) >= 128 && str.charAt(index) <= 55295) || (str.charAt(index)
              >= 57344 && str.charAt(index) <= 65535))) {
              ++indexTemp2; break;
            }
            if (index + 1 < endIndex && ((str.charAt(index) >= 55296 && str.charAt(index)
              <= 56319) && (str.charAt(index + 1) >= 56320 && str.charAt(index + 1) <=
              57343))) {
              indexTemp2 += 2; break;
            }
            if (index < endIndex && ((str.charAt(index) == 32) || (str.charAt(index) == 9) ||
              (str.charAt(index) == 0) || (str.charAt(index) >= 1 && str.charAt(index) <= 8) ||
              (str.charAt(index) >= 11 && str.charAt(index) <= 12) || (str.charAt(index) >= 14 &&
              str.charAt(index) <= 31) || (str.charAt(index) == 127) || (str.charAt(index) ==
              10) || (str.charAt(index) == 13))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            index = indexStart; break;
          }
        } while (false);
        if (index == indexStart) {
          break;
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseQuotedString(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 34)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseQcontent(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        index = ParseFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 34)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null) {
        if (indexTemp == indexStart) {
 tokener.RestoreState(state);
} else {
 tokener.Commit(7, indexStart, indexTemp);
}
      }
      return indexTemp;
    }

    public static int ParseQvalue(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i3, indexStart2, indexStart3, indexTemp, indexTemp2, indexTemp3;
      indexTemp = index;
      do {
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) == 48)) {
            ++index;
          } else {
            break;
          }
          do {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) == 46)) {
                ++index;
              } else {
                break;
              }
              for (i3 = 0; i3 < 3; ++i3) {
              if (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <=
                  57)) {
                  ++index;
                } else {
 break;
}
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              break;
            }
          } while (false);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = index;
        do {
          indexStart2 = index;
          if (index < endIndex && (str.charAt(index) == 49)) {
            ++index;
          } else {
            break;
          }
          do {
            indexTemp3 = index;
            do {
              indexStart3 = index;
              if (index < endIndex && (str.charAt(index) == 46)) {
                ++index;
              } else {
                break;
              }
              for (i3 = 0; i3 < 3; ++i3) {
                if (index < endIndex && (str.charAt(index) == 48)) {
                  ++index;
                } else {
 break;
}
              }
              indexTemp3 = index;
              index = indexStart3;
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              break;
            }
          } while (false);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseReasonspec(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 5 < endIndex && (str.charAt(index) & ~32) == 82 && (str.charAt(index +
          1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 65 && (str.charAt(index + 3) & ~32) == 83 && (str.charAt(index + 4) & ~32) == 79 && (str.charAt(index + 5) & ~32) == 78) {
          index += 6;
        } else {
          break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 61)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseValue(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseReceivedToken(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseAngleAddr(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseAddrSpec(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseDomain(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseAtom(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseQuotedString(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseRegName(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp, indexTemp2;
      indexTemp = index;
      do {
        while (true) {
          indexTemp2 = index;
          do {
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 45 &&
              str.charAt(index) <= 46) || (str.charAt(index) == 95) || (str.charAt(index) ==
              126))) {
              ++indexTemp2; break;
            }
            if (index + 2 < endIndex && (((str.charAt(index) == 37) && (((str.charAt(index +
              1) >= 48 && str.charAt(index + 1) <= 57) || (str.charAt(index + 1) >= 65 &&
              str.charAt(index + 1) <= 70) || (str.charAt(index + 1) >= 97 && str.charAt(index +
              1) <= 102)) && ((str.charAt(index + 2) >= 48 && str.charAt(index + 2) <=
              57) || (str.charAt(index + 2) >= 65 && str.charAt(index + 2) <= 70) ||
              (str.charAt(index + 2) >= 97 && str.charAt(index + 2) <= 102)))))) {
              indexTemp2 += 3; break;
            }
            if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) ==
              36) || (str.charAt(index) >= 38 && str.charAt(index) <= 44) || (str.charAt(index)
              == 59) || (str.charAt(index) == 61))) {
              ++indexTemp2; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseRegularParameter(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseRegularParameterName(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 61)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        tx2 = ParseValue(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseRegularParameterName(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) == 38) || (str.charAt(index) == 43) ||
          (str.charAt(index) >= 45 && str.charAt(index) <= 46) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57) || (str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
          ++index;
          while (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >=
            35 && str.charAt(index) <= 36) || (str.charAt(index) == 38) || (str.charAt(index) ==
            43) || (str.charAt(index) >= 45 && str.charAt(index) <= 46) || (str.charAt(index)
            >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 65 && str.charAt(index)
            <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126))) {
            ++index;
          }
        } else {
          break;
        }
        index = ParseSection(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseResid(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp, indexTemp2;
      indexTemp = index;
      do {
        while (true) {
          indexTemp2 = index;
          do {
            if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
              90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 45 &&
              str.charAt(index) <= 46) || (str.charAt(index) == 95) || (str.charAt(index) ==
              126))) {
              ++indexTemp2; break;
            }
            if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) ==
              36) || (str.charAt(index) >= 38 && str.charAt(index) <= 44) ||
              (str.charAt(index) >= 58 && str.charAt(index) <= 59) || (str.charAt(index) ==
              61))) {
              ++indexTemp2; break;
            }
            if (index + 2 < endIndex && (((str.charAt(index) == 37) && (((str.charAt(index +
              1) >= 48 && str.charAt(index + 1) <= 57) || (str.charAt(index + 1) >= 65 &&
              str.charAt(index + 1) <= 70) || (str.charAt(index + 1) >= 97 && str.charAt(index +
              1) <= 102)) && ((str.charAt(index + 2) >= 48 && str.charAt(index + 2) <=
              57) || (str.charAt(index + 2) >= 65 && str.charAt(index + 2) <= 70) ||
              (str.charAt(index + 2) >= 97 && str.charAt(index + 2) <= 102)))))) {
              indexTemp2 += 3; break;
            }
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseResinfo(
String str,
int index,
int endIndex,
ITokener tokener) {
   int indexStart, indexStart2, indexTemp, indexTemp2, state, state2, tx2,
        tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 59)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        tx2 = ParseMethodspec(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            tx3 = ParseCFWS(str, index, endIndex, tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            tx3 = ParseReasonspec(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            tx3 = ParseCFWS(str, index, endIndex, tokener);
            if (tx3 == index) {
              break;
            } else {
              index = tx3;
            }
            tx3 = ParsePropspec(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseRestrictedName(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, indexTemp;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >= 48 &&
          str.charAt(index) <= 57))) {
          ++index;
        } else {
          break;
        }
        for (i = 0; i < 126; ++i) {
          if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
            (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index) >=
            48 && str.charAt(index) <= 57) || (str.charAt(index) == 33) || (str.charAt(index)
            >= 35 && str.charAt(index) <= 36) || (str.charAt(index) == 38) ||
            (str.charAt(index) >= 94 && str.charAt(index) <= 95) || (str.charAt(index) >= 45 &&
            str.charAt(index) <= 46) || (str.charAt(index) == 43))) {
            ++index;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseResult(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 80 && (str.charAt(index +
          1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 83 && (str.charAt(index + 3) & ~32) == 83) {
          indexTemp += 4; break;
        }
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 70 && (str.charAt(index +
          1) & ~32) == 65 && (str.charAt(index + 2) & ~32) == 73 && (str.charAt(index + 3) & ~32) == 76) {
          indexTemp += 4; break;
        }
        if (index + 7 < endIndex && (str.charAt(index) & ~32) == 83 && (str.charAt(index +
          1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 70 && (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) == 70 && (str.charAt(index + 5) & ~32) == 65 && (str.charAt(index + 6) & ~32) == 73 && (str.charAt(index + 7) & ~32) == 76) {
          indexTemp += 8; break;
        }
        if (index + 6 < endIndex && (str.charAt(index) & ~32) == 78 && (str.charAt(index +
          1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 85 && (str.charAt(index + 3) & ~32) == 84 && (str.charAt(index + 4) & ~32) == 82 && (str.charAt(index + 5) & ~32) == 65 && (str.charAt(index + 6) & ~32) == 76) {
          indexTemp += 7; break;
        }
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 78 && (str.charAt(index +
          1) & ~32) == 79 && (str.charAt(index + 2) & ~32) == 78 && (str.charAt(index + 3) & ~32) == 69) {
          indexTemp += 4; break;
        }
        if (index + 8 < endIndex && (str.charAt(index) & ~32) == 84 && (str.charAt(index +
          1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 77 && (str.charAt(index + 3) & ~32) == 80 && (str.charAt(index + 4) & ~32) == 69 && (str.charAt(index + 5) & ~32) == 82 && (str.charAt(index + 6) & ~32) == 82 && (str.charAt(index + 7) & ~32) == 79 && (str.charAt(index + 8) & ~32) == 82) {
          indexTemp += 9; break;
        }
        if (index + 8 < endIndex && (str.charAt(index) & ~32) == 80 && (str.charAt(index +
          1) & ~32) == 69 && (str.charAt(index + 2) & ~32) == 82 && (str.charAt(index + 3) & ~32) == 77 && (str.charAt(index + 4) & ~32) == 69 && (str.charAt(index + 5) & ~32) == 82 && (str.charAt(index + 6) & ~32) == 82 && (str.charAt(index + 7) & ~32) == 79 && (str.charAt(index + 8) & ~32) == 82) {
          indexTemp += 9; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseSection(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index + 1 < endIndex && str.charAt(index) == 42 && str.charAt(index + 1) == 48) {
          indexTemp += 2; break;
        }
        indexTemp2 = ParseOtherSections(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseSicSequence(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i, i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        for (i = 0; i < 8; ++i) {
          indexTemp2 = ParsePsChar(str, index, endIndex, tokener);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            if (i < 3) {
              index = indexStart;
            }
            break;
          }
        }
        if (index == indexStart) {
          break;
        }
        while (true) {
          state2 = (tokener != null) ? tokener.GetState() : 0;
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            for (i2 = 0; i2 < 8; ++i2) {
              indexTemp3 = ParsePsChar(str, index, endIndex, tokener);
              if (indexTemp3 != index) {
                index = indexTemp3;
              } else {
                if (i2 < 3) {
                  index = indexStart2;
                }
                break;
              }
            }
            if (index == indexStart2) {
              break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else if (tokener != null) {
            tokener.RestoreState(state2); break;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseSioLabelParmSeq(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state, tx2, tx3;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseParameter(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 59)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseFWS(str, index, endIndex, tokener);
            tx3 = ParseSioLabelParmSeq(str, index, endIndex, tokener);
            if (tx3 == index) {
              index = indexStart2; break;
            } else {
              index = tx3;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseSolicitationKeywords(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart2, indexTemp, indexTemp2;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <= 90) ||
          (str.charAt(index) >= 97 && str.charAt(index) <= 122))) {
          ++index;
        } else {
          break;
        }
        while (index < endIndex && ((str.charAt(index) >= 45 && str.charAt(index) <=
          46) || (str.charAt(index) == 95) || (str.charAt(index) >= 65 && str.charAt(index) <=
          90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) || (str.charAt(index)
          >= 48 && str.charAt(index) <= 58))) {
          ++index;
        }
        while (true) {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            if (index + 1 < endIndex && (str.charAt(index) == 44) && ((str.charAt(index +
              1) >= 65 && str.charAt(index + 1) <= 90) || (str.charAt(index + 1) >= 97 &&
              str.charAt(index + 1) <= 122))) {
              index += 2;
            } else {
              break;
            }
            while (index < endIndex && ((str.charAt(index) >= 45 && str.charAt(index) <=
              46) || (str.charAt(index) == 95) || (str.charAt(index) >= 65 && str.charAt(index)
              <= 90) || (str.charAt(index) >= 97 && str.charAt(index) <= 122) ||
              (str.charAt(index) >= 48 && str.charAt(index) <= 58))) {
              ++index;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
 break;
}
        }
        indexTemp = index;
      } while (false);
      return indexTemp;
    }

    public static int ParseStrictHeaderTo(
String str,
int index,
int endIndex,
ITokener tokener) {
      return ParseAddressList(str, index, endIndex, tokener);
    }

    public static int ParseText(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) >= 1 && str.charAt(index) <= 9) ||
          (str.charAt(index) == 11) || (str.charAt(index) == 12) || (str.charAt(index) >= 14 &&
          str.charAt(index) <= 127) || (str.charAt(index) >= 128 && str.charAt(index) <= 55295) ||
          (str.charAt(index) >= 57344 && str.charAt(index) <= 65535))) {
          ++indexTemp; break;
        }
        if (index + 1 < endIndex && ((str.charAt(index) >= 55296 && str.charAt(index) <=
          56319) && (str.charAt(index + 1) >= 56320 && str.charAt(index + 1) <= 57343))) {
          indexTemp += 2; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseTime(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state, tx2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        tx2 = ParseTimeOfDay(str, index, endIndex, tokener);
        if (tx2 == index) {
          break;
        } else {
          index = tx2;
        }
        tx2 = ParseZone(str, index, endIndex, tokener);
        if (tx2 == index) {
          index = indexStart; break;
        } else {
          index = tx2;
        }
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseTimeOfDay(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexStart2, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index + 1 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
          (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
          index += 2;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index < endIndex && (str.charAt(index) == 58)) {
          ++index;
        } else {
          index = indexStart; break;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index + 1 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
          (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
          index += 2;
        } else {
          index = indexStart; break;
        }
        do {
          indexTemp2 = index;
          do {
            indexStart2 = index;
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index < endIndex && (str.charAt(index) == 58)) {
              ++index;
            } else {
              index = indexStart2; break;
            }
            index = ParseCFWS(str, index, endIndex, tokener);
            if (index + 1 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
              57) || (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
              index += 2;
            } else {
              index = indexStart2; break;
            }
            indexTemp2 = index;
            index = indexStart2;
          } while (false);
          if (indexTemp2 != index) {
            index = indexTemp2;
          } else {
            break;
          }
        } while (false);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseTypeString(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexTemp = index;
      do {
        if (index + 2 < endIndex && (str.charAt(index) & ~32) == 65 && (str.charAt(index +
          1) & ~32) == 76 && (str.charAt(index + 2) & ~32) == 76) {
          indexTemp += 3; break;
        }
        if (index + 3 < endIndex && (str.charAt(index) & ~32) == 76 && (str.charAt(index +
          1) & ~32) == 73 && (str.charAt(index + 2) & ~32) == 83 && (str.charAt(index + 3) & ~32) == 84) {
          indexTemp += 4; break;
        }
        if (index + 10 < endIndex && (str.charAt(index) & ~32) == 84 && (str.charAt(index +
          1) & ~32) == 82 && (str.charAt(index + 2) & ~32) == 65 && (str.charAt(index +
          3) & ~32) == 78 && (str.charAt(index + 4) & ~32) == 83 && (str.charAt(index + 5) & ~32) == 65 && (str.charAt(index + 6) & ~32) == 67 && (str.charAt(index + 7) & ~32) == 84 && (str.charAt(index + 8) & ~32) == 73 && (str.charAt(index + 9) & ~32) == 79 && (str.charAt(index + 10) & ~32) == 78) {
          indexTemp += 11; break;
        }
      } while (false);
      return indexTemp;
    }

    public static int ParseValue(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        if (index < endIndex && ((str.charAt(index) == 33) || (str.charAt(index) >= 35 &&
          str.charAt(index) <= 36) || (str.charAt(index) >= 45 && str.charAt(index) <= 46) ||
          (str.charAt(index) >= 48 && str.charAt(index) <= 57) || (str.charAt(index) >= 65 &&
          str.charAt(index) <= 90) || (str.charAt(index) >= 94 && str.charAt(index) <= 126) ||
          (str.charAt(index) >= 42 && str.charAt(index) <= 43) || (str.charAt(index) >= 38 &&
          str.charAt(index) <= 39) || (str.charAt(index) == 63))) {
          ++indexTemp;
          while (indexTemp < endIndex && ((str.charAt(indexTemp) == 33) ||
            (str.charAt(indexTemp) >= 35 && str.charAt(indexTemp) <= 36) ||
            (str.charAt(indexTemp) >= 45 && str.charAt(indexTemp) <= 46) ||
            (str.charAt(indexTemp) >= 48 && str.charAt(indexTemp) <= 57) ||
            (str.charAt(indexTemp) >= 65 && str.charAt(indexTemp) <= 90) ||
            (str.charAt(indexTemp) >= 94 && str.charAt(indexTemp) <= 126) ||
            (str.charAt(indexTemp) >= 42 && str.charAt(indexTemp) <= 43) ||
            (str.charAt(indexTemp) >= 38 && str.charAt(indexTemp) <= 39) ||
            (str.charAt(indexTemp) == 63))) {
            ++indexTemp;
          }
          break;
        }
        indexTemp2 = ParseQuotedString(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseWord(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, indexTemp2, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        indexTemp2 = ParseAtom(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        indexTemp2 = ParseQuotedString(str, index, endIndex, tokener);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseYear(
String str,
int index,
int endIndex,
ITokener tokener) {
      int indexStart, indexTemp, state;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        index = ParseCFWS(str, index, endIndex, tokener);
        if (index + 1 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <= 57) ||
          (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57))) {
          index += 2;
        } else {
          index = indexStart; break;
        }
        while (index < endIndex && (str.charAt(index) >= 48 && str.charAt(index) <= 57)) {
          ++index;
        }
        index = ParseCFWS(str, index, endIndex, tokener);
        indexTemp = index;
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }

    public static int ParseZone(
String str,
int index,
int endIndex,
ITokener tokener) {
      int i2, indexStart, indexStart2, indexTemp, indexTemp2, indexTemp3,
        state, state2;
      indexStart = index;
      state = (tokener != null) ? tokener.GetState() : 0;
      indexTemp = index;
      do {
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          for (i2 = 0; ; ++i2) {
            indexTemp3 = ParseFWS(str, index, endIndex, tokener);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              if (i2 < 1) {
                index = indexStart2;
              }
              break;
            }
          }
          if (index == indexStart2) {
            break;
          }
          if (index < endIndex && ((str.charAt(index) == 43) || (str.charAt(index) == 45))) {
            ++index;
          } else {
            index = indexStart2; break;
          }
          if (index + 3 < endIndex && ((str.charAt(index) >= 48 && str.charAt(index) <=
            57) || (str.charAt(index + 1) >= 48 && str.charAt(index + 1) <= 57) ||
            (str.charAt(index + 2) >= 48 && str.charAt(index + 2) <= 57) || (str.charAt(index +
            3) >= 48 && str.charAt(index + 3) <= 57))) {
            index += 4;
          } else {
            index = indexStart2; break;
          }
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
        state2 = (tokener != null) ? tokener.GetState() : 0;
        indexTemp2 = index;
        do {
          indexStart2 = index;
          index = ParseCFWS(str, index, endIndex, tokener);
          do {
            indexTemp3 = index;
            do {
              if (index + 1 < endIndex && (str.charAt(index) & ~32) == 85 &&
                (str.charAt(index + 1) & ~32) == 84) {
                indexTemp3 += 2; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 71 &&
                (str.charAt(index + 1) & ~32) == 77 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 69 &&
                (str.charAt(index + 1) & ~32) == 83 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 69 &&
                (str.charAt(index + 1) & ~32) == 68 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 67 &&
                (str.charAt(index + 1) & ~32) == 83 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 67 &&
                (str.charAt(index + 1) & ~32) == 68 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 77 &&
                (str.charAt(index + 1) & ~32) == 83 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 77 &&
                (str.charAt(index + 1) & ~32) == 68 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 80 &&
                (str.charAt(index + 1) & ~32) == 83 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index + 2 < endIndex && (str.charAt(index) & ~32) == 80 &&
                (str.charAt(index + 1) & ~32) == 68 && (str.charAt(index + 2) & ~32) ==
                84) {
                indexTemp3 += 3; break;
              }
              if (index < endIndex && ((str.charAt(index) >= 65 && str.charAt(index) <=
                73) || (str.charAt(index) >= 75 && str.charAt(index) <= 90) || (str.charAt(index)
                >= 97 && str.charAt(index) <= 105) || (str.charAt(index) >= 107 &&
                str.charAt(index) <= 122))) {
                ++indexTemp3; break;
              }
            } while (false);
            if (indexTemp3 != index) {
              index = indexTemp3;
            } else {
              index = indexStart2; break;
            }
          } while (false);
          if (index == indexStart2) {
            break;
          }
          index = ParseCFWS(str, index, endIndex, tokener);
          indexTemp2 = index;
          index = indexStart2;
        } while (false);
        if (indexTemp2 != index) {
          indexTemp = indexTemp2; break;
        }
        if (tokener != null) {
 tokener.RestoreState(state2);
}
      } while (false);
      if (tokener != null && indexTemp == indexStart) {
 tokener.RestoreState(state);
}
      return indexTemp;
    }
  }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy