code: func (it *HasA) NextPath(ctx context.Context) bool {
  	// Order here is important. If the subiterator has a NextPath, then we
  	// need do nothing -- there is a next result, and we shouldn't move forward.
  	// However, we then need to get the next result from our last Contains().
  	//
  	// The upshot is, the end of NextPath() bubbles up from the bottom of the
  	// iterator tree up, and we need to respect that.
  	if clog.V(4) {
  		clog.Infof("HASA %v NextPath", it.UID())
  	}
  	if it.primaryIt.NextPath(ctx) {
  		return true
  	}
  	it.err = it.primaryIt.Err()
  	if it.err != nil {
  		return false
  	}
  
  	result := it.NextContains(ctx) // Sets it.err if there's an error
  	if it.err != nil {
  		return false
  	}
  	if clog.V(4) {
  		clog.Infof("HASA %v NextPath Returns %v", it.UID(), result)
  	}
  	return result
  }
docs: // Get the next result that matches this branch.