code: def request_service(self, service_list):
          
          a, b, e = self.pmm[2] & 7, self.pmm[2] >> 3 & 7, self.pmm[2] >> 6
          timeout = 302E-6 * ((b + 1) * len(service_list) + a + 1) * 4**e
          pack = lambda x: x.pack()  # noqa: E731
          data = chr(len(service_list)) + ''.join(map(pack, service_list))
          data = self.send_cmd_recv_rsp(0x02, data, timeout, check_status=False)
          if len(data) != 1 + len(service_list) * 2:
              log.debug("insufficient data received from tag")
              raise tt3.Type3TagCommandError(tt3.DATA_SIZE_ERROR)
          return [unpack("<H", data[i:i+2])[0] for i in range(1, len(data), 2)]
docs: Verify existence of a service (or area) and get the key version.
  
          Each service (or area) to verify must be given as a
          :class:`~nfc.tag.tt3.ServiceCode` in the iterable
          *service_list*. The key versions are returned as a list of
          16-bit integers, in the order requested. If a specified
          service (or area) does not exist, the key version will be
          0xFFFF.
  
          Command execution errors raise :exc:`~nfc.tag.TagCommandError`.