I am looking at the CryptoKitties KittyCore contract. What I notice is that there are multiple contracts within the file. (https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code). I believe if I compiled this file that, even though all the contracts are in a single file, one json file would be created PER contract. However: we also see a single ABI file. The ABI file does not appear mention contracts at all but is rather all the function calls. How is such an ABI file created? Is this done via some compiler option?