code: def attemptCrack(self, ctext: T) -> List[CrackResult]:
      logging.info("Starting to crack hashes")
      result = False
  
      candidates = []
      if len(ctext) == 32:
          for api in md5:
              r = api(ctext, "md5")
              if result is not None or r is not None:
                  logging.debug("MD5 returns True {r}")
                  candidates.append(result, "MD5")
      elif len(ctext) == 40:
          for api in sha1:
              r = api(ctext, "sha1")
              if result is not None and r is not None:
                  logging.debug("sha1 returns true")
                  candidates.append(result, "SHA1")
      elif len(ctext) == 64:
          for api in sha256:
              r = api(ctext, "sha256")
              if result is not None and r is not None:
                  logging.debug("sha256 returns true")
                  candidates.append(result, "SHA256")
      elif len(ctext) == 96:
          for api in sha384:
              r = api(ctext, "sha384")
              if result is not None and r is not None:
                  logging.debug("sha384 returns true")
                  candidates.append(result, "SHA384")
      elif len(ctext) == 128:
          for api in sha512:
              r = api(ctext, "sha512")
              if result is not None and r is not None:
                  logging.debug("sha512 returns true")
                  candidates.append(result, "SHA512")
  
      # TODO what the fuck is this code?
      logging.debug(f"Hash buster returning {result}")
      # TODO add to 5.1 make this return multiple possible candidates
      return [
          CrackResult(
              value=candidates[0][0], misc_info=candidates[1][1]
          )
      ]
  
imports: import re
  from typing import Dict, List, Optional
  import requests
  import logging
  from rich.logging import RichHandler
  from ciphey.iface import Config, Cracker, CrackInfo, CrackResult, ParamSpec, T, registry
label_desc: Use image node_id 5 for calling the HashBuster obj's underlying member method code with example usage: obj.attemptCrack(ctext) and returns: list