Schematic depiction of our immunogen design algorithm. First, we select a pair of epitopes where the fitness cost of mutations required to escape from both epitopes is high in all sequence backgrounds, and then we add additional epitopes sequentially as described in step 1 of the algorithm described in the text. Next, we bridge and merge together overlapping epitopes to form larger blocks, provided that the average pairwise fitness cost for mutations in epitopes in these larger blocks remains high (step 2 of the algorithm). Finally, we extend blocks to a minimum length to avoid introducing too many unnatural junctional epitopes that bridge between blocks when the blocks are concatenated into an immunogen (step 3 of the algorithm). Blocks that cannot be extended to this minimum length without significantly decreasing the pairwise fitness cost of mutations are eliminated.