@Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      if (method.getDeclaringClass() == Object.class) {
        if ("equals".equals(method.getName())) return proxy == args[0];
        if ("hashCode".equals(method.getName())) return hashCode();
        return method.invoke(myRemote, args);
      }
      else {
        Method remoteMethod = ourRemoteToLocalMap.get(Couple.of(myRemote.getClass(), myClazz)).get(method);
        if (remoteMethod == null) throw new NoSuchMethodError(method.getName() + " in " + myRemote.getClass());
        return invokeRemote(method, remoteMethod, myRemote, fixArgs(args, method), myLoader, false);
      }
    }
@Override
    public Object invoke(Object proxy, Method method, Object[] args)