# NLSR Authors

The following lists maintainers, primary developers, and all much-appreciated contributors to NLSR in alphabetic order.
The specific contributions of individual authors can be obtained from the git history of the [official NLSR repository](https://github.com/named-data/NLSR).
If you would like to become a contributor to the official repository, please follow the recommendations in https://github.com/named-data/.github/blob/master/CONTRIBUTING.md.

* Alexander Afanasyev <https://users.cs.fiu.edu/~afanasyev>
* Adam Alyyan <https://github.com/a64adam>
* Syed Obaid Amin <http://obaidamin.weebly.com/>
* Pedro David Arjona Villicaña <https://github.com/david-arjona>
* Muktadir R. Chowdhury <https://github.com/alvyC>
* Damian Coomes <https://github.com/dmcoomes>
* ***(Maintainer)*** Saurab Dulal <https://dulalsaurab.github.io>
* Laqin Fan <https://github.com/laqinfan>
* Simon Fayer <https://github.com/sfayer>
* ***(Former Maintainer)*** Ashlesh Gawande <https://www.linkedin.com/in/agawande>
* ***(Former Maintainer)*** Nicholas Gordon <https://github.com/gorgonical>
* ***(Former Maintainer)*** A. K. M. Mahmudul Hoque <https://sites.google.com/site/akmhoque/home>
* ***(Former Maintainer)*** Vince Lehman <http://vslehman.com>
* Tianxing Ma <https://github.com/matianxing1992>
* Spyridon Mastorakis <https://sites.google.com/site/spyridonmastorakis>
* Eric Newberry <https://ericnewberry.com>
* João Pereira <http://website.jpereira.co.uk>
* Davide Pesavento <https://github.com/Pesa>
* Md Ashiqur Rahman <https://ashiqrahman.com>
* Junxiao Shi <https://cs.arizona.edu/~shijunxiao>
* Salvatore Signorello <https://wwwen.uni.lu/snt/people/salvatore_signorello>
* Jiewen Tan <https://www.linkedin.com/in/jiewentan>
* Alejandro Gil Torres <https://github.com/gltorres>
* Ryan Wickman <http://rwickman.github.io>
* Yingdi Yu <https://irl.cs.ucla.edu/~yingdi>
* Minsheng Zhang <https://www.linkedin.com/in/minsheng-zhang-032023a1>

## Technical Advisors

* Lan Wang <http://www.cs.memphis.edu/~lanwang>
* Beichuan Zhang <https://cs.arizona.edu/~bzhang>
* Lixia Zhang <https://web.cs.ucla.edu/~lixia>
