code: def link_bytecode(cls, attr_dict: Dict[str, str]) -> Type["LinkableContract"]:
          
          if not cls.unlinked_references and not cls.linked_references:
              raise BytecodeLinkingError("Contract factory has no linkable bytecode.")
          if not cls.needs_bytecode_linking:
              raise BytecodeLinkingError(
                  "Bytecode for this contract factory does not require bytecode linking."
              )
          cls.validate_attr_dict(attr_dict)
          bytecode = apply_all_link_refs(cls.bytecode, cls.unlinked_references, attr_dict)
          runtime = apply_all_link_refs(
              cls.bytecode_runtime, cls.linked_references, attr_dict
          )
          linked_class = cls.factory(
              cls.web3, bytecode_runtime=runtime, bytecode=bytecode
          )
          if linked_class.needs_bytecode_linking:
              raise BytecodeLinkingError(
                  "Expected class to be fully linked, but class still needs bytecode linking."
              )
          return linked_class
docs: Return a cloned contract factory with the deployment / runtime bytecode linked.
  
          :attr_dict: Dict[`ContractType`: `Address`] for all deployment and runtime link references.