getManifest(appID, depotID, manifestID, branchName, branchPassword, callback) {
		if (typeof manifestID == 'object' && typeof manifestID.gid == 'string') {
			// At some point, Valve changed the format of appinfo.
			// Previously, appinfo.depots[depotId].manifests.public would get you the public manifest ID.
			// Now, you need to access it with appinfo.depots[depotId].manifests.public.gid.
			// Here's a shim to keep consumers working properly if they expect the old format.
			manifestID = manifestID.gid;
			this._warn(`appinfo format has changed: you now need to use appinfo.depots[${depotID}].manifests.${branchName || 'public'}.gid to access the manifest ID. steam-user is fixing up your input, but you should update your code to retrieve the manifest ID from its new location in the appinfo structure.`);
		}

		if (typeof branchName == 'function') {
			callback = branchName;
			branchName = null;
		}

		if (typeof branchPassword == 'function') {
			callback = branchPassword;
			branchPassword = null;
		}

		return StdLib.Promises.timeoutCallbackPromise(10000, ['manifest'], callback, async (resolve, reject) => {
			let manifest = ContentManifest.parse((await this.getRawManifest(appID, depotID, manifestID, branchName, branchPassword)).manifest);

			if (!manifest.filenames_encrypted) {
				return resolve({manifest});
			}

			ContentManifest.decryptFilenames(manifest, (await this.getDepotDecryptionKey(appID, depotID)).key);
			return resolve({manifest});
		});
	}
Download a depot content manifest.
@param {int} appID
@param {int} depotID
@param {string} manifestID
@param {string} branchName - Now mandatory. Use 'public' for a the public build (i.e. not a beta)
@param {string} [branchPassword]
@param {function} [callback]
@return Promise