Access Control This assignment is to write an access control list interpreter for some multi-access system. You can imagine that it's a web server or a database; those details don't matter. The input is a sequence of {ACL, commandseq}. Each ACL is itself a sequence of lines; each 'commandseq' is a sequence of zero or more commands. The input is thus structured like this: acl1 line1 acl1 line2 acl1 line3 ... acl1 lineN command1a command1b acl2 line1 acl2 line2 acl2 line3 ... acl2 lineN command2a command2b ... aclM line1 aclM line2 aclM line3 ... aclM lineN commandM The list of entries in an ACL may be arbitrarily long. An ACL line looks like this: user group permissions where 'user' and 'group' are sequences of letters or digits. A 'permission' is either '-', for no permissions, or some sequence of the letters 'r', 'w', 'c', and 'x'. The three fields are separated by any amount of white space. A user or group of '*' is a wildcard; it matches all users or groups. A command starts with an '/' and looks like this: /user group operation where 'user' and 'group' are as above and 'operation' is either 'r', 'w', 'c', or 'x'. When multiple commands follow a single ACL, they are all interpreted with respect to the single, preceeding ACL. Note: wild cards are not permitted on commands, only in ACL entries. Empty lines should be ignored; any text following a # is a comment and should be ignored. These requirements make it easier to structure and understand the test data. Access Control Lists are, as mentioned in class, order-sensitive. Any operation not explicitly permitted by an ACL is to be denied. The output from the program should list each command, a failure message if appropriate, and the ACL line that permitted it if it succeeded.