code: def _is_object_ref_actor_handle(self) -> bool:
      object_ref_hex = self.object_ref.hex()
  
      # We need to multiply 2 because we need bits size instead of bytes size.
      taskid_random_bits_size = (
          TASKID_BYTES_SIZE - ACTORID_BYTES_SIZE
      ) * 2
      actorid_random_bits_size = (
          ACTORID_BYTES_SIZE - JOBID_BYTES_SIZE
      ) * 2
  
      # random (8B) | ActorID(6B) | flag (2B) | index (6B)
      # ActorID(6B) == ActorRandomByte(4B) + JobID(2B)
      # If random bytes are all 'f', but ActorRandomBytes
      # are not all 'f', that means it is an actor creation
      # task, which is an actor handle.
      random_bits = object_ref_hex[:taskid_random_bits_size]
      actor_random_bits = object_ref_hex[
          taskid_random_bits_size : taskid_random_bits_size
          + actorid_random_bits_size
      ]
      if random_bits == "f" * 16 and not actor_random_bits == "f" * 24:
          return True
      else:
          return False
  
imports: import base64
  import logging
  from collections import defaultdict
  from enum import Enum
  from typing import List
  import ray
  from ray._private.internal_api import node_stats
  from ray._raylet import ActorID, JobID, TaskID
label_desc: Use image node_id 5 for calling the MemoryTableEntry obj's underlying member method code with example usage: obj._is_object_ref_actor_handle() and returns: True, False