code: def load_server_model(self, client_id, model_path):
      if self.model is not None:
          invalidOperationError(
              False,
              f"Model exists, model uploading from {client_id} ignored.",
          )
      else:
          logging.info(f"Trying to load model from {model_path}")
          if self.secret_key is not None and self.salt is not None:
              logging.info(f"Loading encrypted model...")
              with open(f"{model_path}/model.pt", "rb") as f:
                  encrypted_read = f.read()
                  loaded = decrypt_bytes_with_AES_CBC(
                      encrypted_read, self.key, self.salt
                  )
                  buffer_load = io.BytesIO(loaded)
                  self.model = torch.jit.load(buffer_load)
          else:
              logging.warn(f"Loading unencrypted model...")
              self.model = torch.jit.load(f"{model_path}/model.pt")
          # if loaded, set meta here to make the optimizer bind the model
          with open(f"{model_path}/model.meta", "rb") as meta_file:
              meta = SafePickle.load(meta_file)
              self.loss_fn = meta["loss"]
              self.set_optimizer(
                  meta["optimizer"][0], meta["optimizer"][1]
              )
  
imports: import io
  from bigdl.ppml.utils.safepickle import SafePickle
  import logging
  import threading
  from torch import nn
  import torch
  from bigdl.ppml.fl.nn.utils import ndarray_map_to_tensor_map
  from bigdl.dllib.utils.log4Error import invalidInputError, invalidOperationError
  from threading import Condition
  import os
  from bigdl.dllib.utils.encryption_utils import *
label_desc: Use image node_id 9 for calling the Aggregator obj's underlying member method code with example usage: obj.load_server_model(client_id, model_path) without return types