Difference between different kinds of address return values of a libp2p host

Can some please explain to me the difference between host.Network().ListenAddresses() and host.Network().InterfaceListenAddresses() and host.Addrs()?

host.Network().ListenAddresses() are the raw addresses you’ve specified to listen on, for example /ip4/0.0.0.0/tcp/8080. This is an ephemeral IP that will be expanded later, but you can check the raw addresses of your host by using this method.

host.Network().InterfaceListenAddresses() are the transformed raw addresses. These will take your raw addresses and map them to your local network interfaces. This would result in your localhost 127.0.0.1 and local IP (such as: 192.x.x.x).

host.Addrs() are addresses that are safe to announce. In libp2p you can filter out addresses, such as private or localhost addresses. The filters will be run on all of your addresses (host.AllAddrs()) and return a subset of those. These addresses will be shared with other libp2p nodes on the network. If you have configured announce addresses, such as a dns address, these will also be returned here.