private MultiLayout getMultiLayout(Address primaryModelAddress, boolean isGap) {
		// Check that this wasn't handed a null primaryModelAddress.
		// Some addresses (such as externals) can't have an equivalent primary address determined.
		if (primaryModelAddress == null) {
			return null;
		}
		MultiLayout ml = cache.get(primaryModelAddress);
		if (ml == null) {
			Layout[] layouts = new Layout[models.length];
			boolean hasLayout = false;
			for (int i = 0; i < models.length; i++) {
				layouts[i] = models[i].getLayout(primaryModelAddress, isGap);
				hasLayout |= layouts[i] != null;
			}
			if (hasLayout) {
				ml = new MultiLayout(layouts, emptyFactory);
			}
			else {
				ml = new MultiLayout();
			}
			cache.put(primaryModelAddress, ml);
		}
		if (ml.isEmpty()) {
			return null;
		}
		return ml;
	}
Returns the ListingLayoutModel for the i'th program.
@param index the index of program for which to return a listing model
@return the ListingLayoutModel for the i'th program.
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/multilisting/MultiListingLayoutModel.java