content Equals
Two TimeLockVaultDestinations are equal iff they would produce the same on-chain locking script — i.e., the same vault address. That's fully determined by (chainSelector, pubkey, unlockValue, hdIndex):
chainSelector addresses on different chains are never equal
pubkey determines the constraint hash committed on-chain (compared as bytes here, not as the secret, so two destinations match even if one is locked / encrypted and the other isn't)
unlockValue cleartext visible arg in the locking script
hdIndex cleartext visible arg in the locking script
template, constraint, and visibleConstraint are deterministic functions of those four inputs (see init), so they don't need to be compared separately. derivedType is checked via the is cast. contractName is wallet-local metadata and deliberately excluded.