docs: function extractBundles(depsArray, depsUsageArray) {
  	var i, j, ret, curBundle;
  	
  	depsUsageArray = depsUsageArray.slice(0); // copy so we can modify
  	ret = {
  		depsToBundleMap: {},
  		bundlesArray: []
  	};
  	
  	for( i=0; i < depsUsageArray.length; i++ ) {
  		if( depsUsageArray[i] === false ) continue;
  		curBundle = {
  			id: null,
  			deps: [depsArray[i]],
  			exclusive: isUsageExclusive(depsUsageArray[i])
  		};
  		ret.depsToBundleMap[depsArray[i]] = curBundle;
  		for( j=i+1; j < depsUsageArray.length; j++ ) {
  			if( depsUsageArray[i] === depsUsageArray[j] ) {
  				ret.depsToBundleMap[depsArray[j]] = curBundle;
  				curBundle.deps.push(depsArray[j]);
  				depsUsageArray[j] = false;
  			}
  		}
  		curBundle.deps.sort(); // so that the bundleId will be consistent
  		curBundle.id = makeBundleId(curBundle);
  		ret.bundlesArray.push(curBundle);
  	}
  	
  	return ret;
  	
  	function makeBundleId(b) {
  		var md5 = crypto.createHash("md5"), i;
  		for( i=0; i < b.deps.length; i++ ) {
  			md5.update(b.deps[i]);
  		}
  		return md5.digest("hex");
  	}
  }