@Override
 public int hashCode() {
   int result = instrumentedType.hashCode();
   result = 31 * result + loadedTypeInitializer.hashCode();
   result = 31 * result + typeInitializer.hashCode();
   result = 31 * result + implementations.hashCode();
   return result;
 }
 @Override
 public boolean equals(Object other) {
   if (this == other) return true;
   if (other == null || getClass() != other.getClass()) return false;
   Compiled compiled = (Compiled) other;
   return instrumentedType.equals(compiled.instrumentedType)
       && loadedTypeInitializer.equals(compiled.loadedTypeInitializer)
       && typeInitializer.equals(compiled.typeInitializer)
       && implementations.equals(compiled.implementations);
 }
 @Override
 public boolean equals(Object other) {
   if (this == other) return true;
   if (other == null || getClass() != other.getClass()) return false;
   Prepared prepared = (Prepared) other;
   return implementations.equals(prepared.implementations)
       && loadedTypeInitializer.equals(prepared.loadedTypeInitializer)
       && typeInitializer.equals(prepared.typeInitializer)
       && instrumentedType.equals(prepared.instrumentedType)
       && methodGraph.equals(prepared.methodGraph);
 }