code: private static List<List<String>> doParse(String appliesTo) {
          boolean quoted = false;
          int index = 0;
  
          List<String> entry = new ArrayList<String>();
          List<List<String>> result = new ArrayList<List<String>>();
          for (int i = 0; i < appliesTo.length(); i++) {
              char c = appliesTo.charAt(i);
              if (c == '"') {
                  quoted = !quoted;
              }
              if (!quoted) {
                  if (c == ',') {
                      entry.add(appliesTo.substring(index, i));
                      // We've read one applies to entry in
                      // Add to result and start a new one
                      index = i + 1;
                      result.add(entry);
                      entry = new ArrayList<String>();
                  } else if (c == ';') {
                      entry.add(appliesTo.substring(index, i));
                      index = i + 1;
                  }
              }
          }
          entry.add(appliesTo.substring(index));
          result.add(entry);
          return result;
      }
docs: Should be parsing a string that looks like
  "blah;blah;blah,foo;foo;foo,baz;baz;baz"
  into a list of lists, so something like
  <blah,blah,blah>,<foo,foo,foo>,<baz,baz,baz>