code: def run(
      main_script_path: str,
      is_hello: bool,
      args: List[str],
      flag_options: Dict[str, Any],
  ) -> None:
      """Run a script in a separate thread and start a server for the app.
  
      This starts a blocking asyncio eventloop.
      """
      _fix_sys_path(main_script_path)
      _fix_matplotlib_crash()
      _fix_tornado_crash()
      _fix_sys_argv(main_script_path, args)
      _fix_pydeck_mapbox_api_warning()
      _fix_pydantic_duplicate_validators_error()
      _install_config_watchers(flag_options)
      _install_pages_watcher(main_script_path)
  
      # Create the server. It won't start running yet.
      server = Server(main_script_path, is_hello)
  
      async def run_server() -> None:
          # Start the server
          await server.start()
          _on_server_start(server)
  
          # Install a signal handler that will shut down the server
          # and close all our threads
          _set_up_signal_handler(server)
  
          # Wait until `Server.stop` is called, either by our signal handler, or
          # by a debug websocket session.
          await server.stopped
  
      # Run the server. This function will not return until the server is shut down.
      asyncio.run(run_server())
  
imports: import asyncio
  import os
  import signal
  import sys
  from pathlib import Path
  from typing import Any, Dict, List
  import click
  from streamlit import config, env_util, file_util, net_util, secrets, url_util, util, version
  from streamlit.config import CONFIG_FILENAMES
  from streamlit.git_util import MIN_GIT_VERSION, GitRepo
  from streamlit.logger import get_logger
  from streamlit.source_util import invalidate_pages_cache
  from streamlit.watcher import report_watchdog_availability, watch_dir, watch_file
  from streamlit.web.server import Server, server_address_is_unix_socket, server_util
label_desc: Use image node_id 16 for calling a global function with example usage: run(main_script_path, is_hello, args, flag_options) without return types