code: private String accessUtf8(int cpIndex) {
  		Object object = cpdata[cpIndex];
  		if (object instanceof String) {
  			return (String) object;
  		}
  		int[] ptrAndLen = (int[]) object;
  		String value;
  		try {
  			value = new String(classbytes, ptrAndLen[0], ptrAndLen[1], "UTF8");
  		}
  		catch (UnsupportedEncodingException e) {
  			throw new IllegalStateException("Bad data found at constant pool position " + cpIndex + " offset="
  					+ ptrAndLen[0] + " length=" + ptrAndLen[1], e);
  		}
  		cpdata[cpIndex] = value;
  		return value;
  	}
docs: Return the UTF8 at the specified index in the constant pool. The data found at the constant pool for that index
  may not have been unpacked yet if this is the first access of the string. If not unpacked the constant pool entry
  is a pair of ints in an array representing the offset and length within the classbytes where the UTF8 string is
  encoded. Once decoded the constant pool entry is flipped from an int array to a String for future fast access.
  
  @param cpIndex constant pool index
  @return UTF8 string at that constant pool index