1. A key-manager module provides a different key every time a key is requested by a client. A key-manager can return keys to its clients, compare them for equality, and determine which of two keys is smaller. Design the key-manager module and describe the design, using TDN. 2. Define precisely module GENERIC_FIFO_QUEUE, and instantiate a module that represents the abstract data type “queue of integer values.” Show how you can then generate an abstract object instance.