code: public UTF8String substring(final int start, final int until) {
      if (until <= start || start >= numBytes) {
        return EMPTY_UTF8;
      }
  
      int i = 0;
      int c = 0;
      while (i < numBytes && c < start) {
        i += numBytesForFirstByte(getByte(i));
        c += 1;
      }
  
      int j = i;
      while (i < numBytes && c < until) {
        i += numBytesForFirstByte(getByte(i));
        c += 1;
      }
  
      if (i > j) {
        byte[] bytes = new byte[i - j];
        copyMemory(base, offset + j, bytes, BYTE_ARRAY_OFFSET, i - j);
        return fromBytes(bytes);
      } else {
        return EMPTY_UTF8;
      }
    }
docs: Returns a substring of this.
  @param start the position of first code point
  @param until the position after last code point, exclusive.