The following volunteers have contributed code, documentation, testing and/or
support to the Apache Flex SDK.

Apache Flex SDK 4.15.0
----------------------
Ad Pijnenburg, Aleksey, Alex Harui, Andrey Gorbatov, Andy Dufilie, Andrei Tchijov,
Chris Martin, Christofer Dutz, Dany Dhondt, Darrell Loverin, Erik de Bruin,
Frédéric Thomas, Harbs,  Josh Tynjala, Justin Mclean, Mark Kessler, Mihai Chira,
OmPrakash Muppirala, Piotr Zarzycki, Robbyn Gerhardt, Tom Chiverton, Tom Goemaes

Apache Flex SDK 4.14.1
----------------------
Alex Harui, Dany Dhondt, Erik de Bruin, George Yabra, Greg Dove, Justin Mclean,
Kevin Godell, Lee Burrows, Les Woolsey, Mara Cou, Mihai Chira, OmPrakash Muppirala,
Piotr Zarzycki, Ross Taylor, Shane Doolan, Shawn Liou, Stephan Plath, Vitaliy Parfenov

Apache Flex SDK 4.14.0
----------------------
Aaron Nash, Ad Pijnenburg, After24, Alex Harui, Andras Janurik, Anthony,
Chris Martin, Christofer Dutz, Curtis Aube, Darrell Loverin,  Dimitri Kara,
Erik de Bruin, Frédéric Thomas, Gareth Daniel Smith, Hugo Ferreira, Jeff Spicer, 
Jorn Nolles, Justin Mclean, Keith Lee, Kevin Godell, Lee Burrows, Mahmoud Ali, 
Marcus Wilkinson, Mark Kessler, Mihai Chira, Neil Madsen, Olaf Krüger, 
OmPrakash Muppirala, Peter Volf, Shigeru Nakagaki, Stefan Overkamp, 
Tom Chiverton, Vadim Usoltsev, Vitaliy Parfenov

Apache Flex SDK 4.13.0
----------------------
Alex Harui, Alexander Konovalov, Alexander Mazuruk, Alexander Scheibe, Bi Jane Jia,
Chris Martin, Constantin A., Darkstone, Erik de Bruin, Fabiano Citrone, faniprasad,
Frédéric Monjo, Frédéric Thomas, J. Terry Corbet, João Fernandes, Jose Barragan,
Justin Mclean, Kevin lam, Mark Kessler, Maurice Amsellem, Michael Labriola, Mihai Chira,
Nick Kwiatkowski, OmPrakash Muppirala, Quinn Buchanan, Tom Chiverton, Vladimir Cicmanec 

Apache Flex SDK 4.12.1
----------------------
Achim, Alex Harui, Alexander Scheibe, Darkstone, Doug Pierce, Erik de Bruin,
Franklyn de Quadros, Frédéric Leroy, Frédéric Thomas, George Yabra, Jeff Spicer,
João Fernandes, Jose Barragan, Josh Weinberg, Justin Mclean, Lee Burrows, Marcus Fritze,
Maurice Amsellem, Mihai Chira, Nick Kwiatkowski, OmPrakash Muppirala, Ori Segal,
Piotr Zarzycki, Shigeru Nakagaki

Apache Flex SDK 4.12.0
----------------------
Alan Holden, Aleksey, Alex Harui, Andrey Gorbatov, Benjamin Chalupka, Benoit Wiart,
Carlos Rovira, Chris Martin, Colin Childs, Curtis Aube, Dan Murray, Danko Kozar,
David Harrburger, Deyan Vitanov, Dudda, Eric De Bruin, Fabiano Citrone, Frédéric Thomas,
Gareth Daniel Smith, Hugo Ferreira, Jaroslav Pavlicek, João Fernandes, Justin Mclean,
Keith Lee, Lee Burrows, Mario Specht, Mark Kessler, Mark Saunders, Maurice Amsellem,
Micha Pooh, Mihai Chira, Morten Gorm Madsen, Nils Berghs, OmPrakash Muppirala,
Paul Hastings, Piotr Zarzycki, Pol Poggi, Santosh Radhakrishna, Shardul Singh Bartwal,
Simon Lavallee, Stepan Hilbert, Stephan Plath, Swen van Zanten, Sword Dragon,
Tamás Nepusz, Thiago Maia, Tom Chiverton, Tristan, Vincent Spallek

Apache Flex SDK 4.11.0
----------------------
Alex Harui, Ashish Desai, Brian Chiu, Bui Sy Nguyen, Caio, Chengxingpeng, Chris Velevitch,
Cosma Colanicchia, Cyrill Zadra, David Lantier, David Yun, Dylan Randall, Erik de Bruin,
Frédéric Monjo, Frédéric Thomas, Gareth Daniel Smith, Gary N Griswold, Gkk, Harbs,
Hugo Ferreira, Igor Costa, Jozef Chutka, Justin Mclean, Karthik Dhanapal, Lee Burrows,
Marcus Fritze, Marcus Wilkinson, Mario Specht, Mark Kessler, Maurice Amsellem,
Michael O'Keefe, Michał Sz., Mihai Chira, Mike Crank, Morgan Bruneau, Nicholas Kwiatkowski,
OmPrakash Muppirala, Paul Hastings, Pol Poggi, Robbyn Gerhardt, Robert Bar, Robert Hunt,
Sebastian Toro, Sebastien Paturel, Stefan Overkamp, Stephan Plath,Swen van Zanten,
Sword Dragon, Tom Chiverton, Vitali Kabak

Apache Flex SDK 4.10.0
----------------------
Al Birdy, Alex Harui, Aurélien Baroiller, aYo, Benjamin Chalupka, Carlos Rovira,
Carol Frampton, Chris Martin, Colin Childs, Cyrill Zadra, Dasa Paddock, David Bel,
Edgar Rivera, Ejaz Asghar, Erik de Bruin, Fabio Todaro, Flex Hdsign, Fréderic Cox,
Frédéric Thomas, Giles Roadnight, Harbs, João Fernandes, João Sérgio Nobre Saleiro,
Jozef Chutka, Justin Mclean, Koen Weyn, Mark Kessler, Mark Saunders, Maxime Cowez,
Mihai Chira, Nazar Yavny, Nick Kwiatkowski, OmPrakash Muppirala, Pedro Varela,
Peter Wharmby, Philip Mair, Ryan, Sebastien Paturel, Sky, Swen van Zanten,Tristan,
Vikas Saurabh, Wilson Silva, Yann Cabon, Yiotis Katsambas

Apache Flex SDK 4.9.1
---------------------
Adnan Doric, Alex Harui, aYo, Bjorn Svensson, Carol Frampton, Frédéric Leroy,
Frédéric Thomas, JC Franco, João Saleiro, Justin Mclean, Mikko Torniainen,
Nicholas Kwiatkowski, OmPrakash Muppirala, Rahul Singh Rawat

Apache Flex SDK 4.9.0
---------------------
Alex Harui, Carol Frampton, Chema Balsas, Cyrill Zadra, Dave Fisher, Deepti Yadav,
Droopy, Erik de Bruin, Frédéric Thomas, Jigar Oza, João Fernandes, Justin Mclean,
Leif Wells, Maurice Amsellem, Maxime Cowez, Mikko Torniainen, Nicholas Kwiatkowski,
OmPrakash Muppirala, Pablo Beltran, Rahul, Raimundas Banevicius, Robbyn Gerhardt,
Sebastian Wichmann, Simon Gladman, Sudhir, Sugan Naicker, Zqlu

Apache Flex SDK 4.8.0
---------------------
Alex Harui, Bertrand Delacretaz, Carlos Rovira, Carol Frampton, Christofer Dutz,
Christophe Herreman, Dave Fisher, David Yun, Heinrich Ruoff, Igor Costa, Jason Moore,
Joan Llenas Masó, João Fernandes, Justin Mclean, Maurice Amsellem, Michael A. Labriola,
Nicholas Kwiatkowski, OmPrakash Muppirala, Peter Elst, Shigeru Nakagaki,
Spiros Aggelopoulos

Many other people have contributed in other ways to the Apache Flex project by
helping out on the mailing list, maintaining the website, adding and editing wiki
content, raising bugs in JIRA, and with many other tasks.

Please check the Apache Flex website [1], Apache Flex wiki [2], Apache Flex team
page [3], dev mailing list [4], Apache Flex JIRA [5], GitHub mirror [6] for some
of these contributions.

If you've missing from any of these lists please get in touch and you'll appear
in future versions of this document.

1. http://flex.apache.org
2. http://en.wikipedia.org/wiki/Apache_Flex
3. http://flex.apache.org/about-people.html
4. http://markmail.org/search/+list:org.apache.incubator.flex-dev
5. https://issues.apache.org/jira/browse/FLEX
6. https://github.com/apache/flex-sdk