code: func (s *LesServer) Start(srvr *p2p.Server) {
  	s.maxPeers = s.config.LightPeers
  	totalRecharge := s.costTracker.totalRecharge()
  	if s.maxPeers > 0 {
  		s.freeClientCap = minCapacity //totalRecharge / uint64(s.maxPeers)
  		if s.freeClientCap < minCapacity {
  			s.freeClientCap = minCapacity
  		}
  		if s.freeClientCap > 0 {
  			s.defParams = flowcontrol.ServerParams{
  				BufLimit:    s.freeClientCap * bufLimitRatio,
  				MinRecharge: s.freeClientCap,
  			}
  		}
  	}
  	freePeers := int(totalRecharge / s.freeClientCap)
  	if freePeers < s.maxPeers {
  		log.Warn("Light peer count limited", "specified", s.maxPeers, "allowed", freePeers)
  	}
  
  	s.freeClientPool = newFreeClientPool(s.chainDb, s.freeClientCap, 10000, mclock.System{}, func(id string) { go s.protocolManager.removePeer(id) })
  	s.priorityClientPool = newPriorityClientPool(s.freeClientCap, s.protocolManager.peers, s.freeClientPool)
  
  	s.protocolManager.peers.notify(s.priorityClientPool)
  	s.startEventLoop()
  	s.protocolManager.Start(s.config.LightPeers)
  	if srvr.DiscV5 != nil {
  		for _, topic := range s.lesTopics {
  			topic := topic
  			go func() {
  				logger := log.New("topic", topic)
  				logger.Info("Starting topic registration")
  				defer logger.Info("Terminated topic registration")
  
  				srvr.DiscV5.RegisterTopic(topic, s.quitSync)
  			}()
  		}
  	}
  	s.privateKey = srvr.PrivateKey
  	s.protocolManager.blockLoop()
  }
docs: // Start starts the LES server