code: func ReadAndInterpolateManifest(pathToManifest string, pathsToVarsFiles []string, vars []template.VarKV) ([]Application, error) {
  	rawManifest, err := ReadAndInterpolateRawManifest(pathToManifest, pathsToVarsFiles, vars)
  	if err != nil {
  		return nil, err
  	}
  
  	var manifest Manifest
  	err = yaml.Unmarshal(rawManifest, &manifest)
  	if err != nil {
  		return nil, err
  	}
  
  	for i, app := range manifest.Applications {
  		if app.Path != "" && !filepath.IsAbs(app.Path) {
  			manifest.Applications[i].Path = filepath.Join(filepath.Dir(pathToManifest), app.Path)
  		}
  	}
  
  	return manifest.Applications, err
  }
docs: // ReadAndInterpolateManifest reads the manifest at the provided paths,
  // interpolates variables if a vars file is provided, and returns a fully
  // merged set of applications.