code: public static Object iiIntercept(Object instance, Object[] params, Object instance2, String nameAndDescriptor) {
  		Class<?> clazz = instance.getClass();
  		try {
  			if (clazz.getName().contains("$$Lambda")) {
  				// There may be multiple methods here, we want the public one (I think!)
  				Method[] ms = instance.getClass().getDeclaredMethods();
  				// public java.lang.String basic.LambdaJ$$E002$$Lambda$2/1484594489.m(java.lang.String,java.lang.String)
  				// private static basic.LambdaJ$Foo basic.LambdaJ$$E002$$Lambda$2/1484594489.get$Lambda(basic.LambdaJ)
  				Method toUse = null;
  				for (Method m : ms) {
  					if (Modifier.isPublic(m.getModifiers())) {
  						toUse = m;
  						break;
  					}
  				}
  				toUse.setAccessible(true);
  				Object o = toUse.invoke(instance, params);
  				return o;
  			}
  			else {
  				// Do what you were going to do...
  				Method m = instance.getClass().getDeclaredMethod("__execute", Object[].class, Object.class,
  						String.class);
  				m.setAccessible(true);
  				return m.invoke(instance, params, instance, nameAndDescriptor);
  			}
  		}
  		catch (Exception e) {
  			e.printStackTrace();
  		}
  		return null;
  	}
docs: See notes.md#001
  
  @param instance the object instance on which the INVOKEINTERFACE is being called
  @param params the parameters to the INVOKEINTERFACE call
  @param instance2 the object instance on which the INVOKEINTERFACE is being called
  @param nameAndDescriptor the name and descriptor of what is being called (e.g. foo(Ljava/lang/String)I)
  @return the result of making the INVOKEINTERFACE call