def METHOD_NAME(self, input):  # noqa
    """Serve the build directory with a webserver."""
    dirname, filename = os.path.split(input)
    handlers: list = [
        (r"/(.+)", web.StaticFileHandler, {"path": dirname}),
        (r"/", web.RedirectHandler, {"url": "/%s" % filename}),
    ]
    if "://" in self.reveal_prefix or self.reveal_prefix.startswith("//"):
        # reveal specifically from CDN, nothing to do
        pass
    elif os.path.isdir(os.path.join(dirname, self.reveal_prefix)):
        # reveal prefix exists
        self.log.info("Serving local %s", self.reveal_prefix)
    else:
        self.log.info("Redirecting %s requests to %s", self.reveal_prefix, self.reveal_cdn)
        handlers.insert(0, (r"/(%s)/(.*)" % self.reveal_prefix, ProxyHandler))
    app = web.Application(
        handlers,
        cdn=self.reveal_cdn,
        client=AsyncHTTPClient(),
    )
    # hook up tornado logging to our logger
    log.app_log = self.log
    http_server = httpserver.HTTPServer(app)
    http_server.listen(self.port, address=self.ip)
    url = "http://%s:%i/%s" % (self.ip, self.port, filename)
    print("Serving your slides at %s" % url)
    print("Use Control-C to stop this server")
    if self.open_in_browser:
        try:
            browser = webbrowser.get(self.browser or None)
            b = lambda: browser.open(url, new=2)  # noqa
            threading.Thread(target=b).start()
        except webbrowser.Error as e:
            self.log.warning("No web browser found: %s." % e)
            browser = None
    try:
        ioloop.IOLoop.instance().start()
    except KeyboardInterrupt:
        print("\nInterrupted")