LICENSE AGREEMENT FOR INTELLIJ IDEA
(Academic License)

Version 10, Effective as of August 23, 2014

IMPORTANT! READ CAREFULLY: THIS IS A LEGAL AGREEMENT. BY DOWNLOADING, INSTALLING, COPYING, SAVING ON YOUR COMPUTER, OR OTHERWISE USING THIS SOFTWARE, YOU (LICENSEE, AS DEFINED BELOW) ARE BECOMING A PARTY TO THIS AGREEMENT AND YOU ARE CONSENTING TO BE BOUND BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU SHOULD NOT DOWNLOAD, INSTALL AND USE THE SOFTWARE.

1. PARTIES

(a) "Licensor" means JetBrains s.r.o., having its principal place of business at Na hrebenech II 1718/10, Prague, 14700, Czech Republic, registered with Commercial Register kept by the Municipal Court of Prague, Section C, file 86211, ID.Nr.: 265 02 275.

(b) "Licensee" means (i) the individual who is a student, faculty or staff member at an educational institution, or (ii) the educational institution specified in the License Certificate. For purposes of this definition, "educational institution" means a public or private school, college, university or other post-secondary educational establishment.

2. DEFINITIONS

(a) "Software" means software program known as IntelliJ IDEA in binary form, including its documentation, upgrades provided pursuant to Section 10 of this Agreement, and any third party software programs that are owned and licensed pursuant to Section 7 of this Agreement by parties other than Licensor and that are either integrated with or made part of IntelliJ IDEA (collectively, "Third Party Software").

(b) "Authorized User" means (i) if Licensee is an individual, solely Licensee; (ii) if Licensee is an educational institution, any student, faculty or staff member authorized by Licensee to use Software while performing duties within the scope of their employment or assignment.

(c) "Client" means a computer device used by Authorized User for running Software.

(d) "JetBrains Account" means profile record on https://account.jetbrains.com , which identifies Authorized User and licenses for Software provided to the Authorized User by Licensee. Sharing credentials for a JetBrains Account among multiple Authorized Users is not permitted.

(e) "License Certificate" means evidence of a license provided by Licensor to Licensee in electronic or printed form.

(f) "License Key" means a unique key-code that enables a single Authorized User to use Software at a time. Only Licensor and/or its representatives are permitted to produce License Keys for Software.

3. OWNERSHIP

(a) Software is the property of Licensor or its suppliers. Software is licensed, not sold. Title and copyrights to Software, in whole and in part and all copies thereof, and all modifications, enhancements, derivatives and other alterations of Software regardless of who made any modifications, if any, are, and will remain, the sole and exclusive property of Licensor and its suppliers.

(b) Software is protected by United States Copyright Law and International Treaty provisions. Further, the structure, organization, and code embodied in Software are the valuable and confidential trade secrets of Licensor and its suppliers and are protected by intellectual property laws and treaties. Licensee agrees to abide by the copyright law and all other applicable laws of the United States including, but not limited to, export control laws.

4. GRANT OF LICENSE

Subject to the terms, conditions, and limitations set forth in this Agreement, Licensor hereby grants to Licensee a limited, non-exclusive, non-transferable license to use Software for non-commercial, educational purposes only (including conducting academic research or providing educational services) as follows:

(a) Licensee may:
(i) install and use the version of the Software that has been specified in License Certificate on multiple Clients and operating systems, provided that a number of concurrent users never exceeds the number of Authorized Users specified in License Certificate and that the same License Key is not used concurrently by different Authorized Users, on different Clients or operating systems;
(ii) use the Software for non-commercial, educational purposes only, including conducting academic research or providing educational services;
and
(iii) make one backup copy of Software solely for archival purposes.

(b) Licensee may not:
(i) sell, redistribute (except as set forth in Paragraph 5 herein), encumber, give, lend, rent, lease, sublicense, or otherwise transfer Software, or any portions of Software, to anyone without the prior written consent of Licensor;
(ii) reverse engineer, decompile, disassemble, modify, translate, make any attempt to discover the source code of Software, or create derivative works from Software;
(iii) use the same License Key or JetBrains Account concurrently by multiple Authorized Users, on multiple Software instances or Clients. Software may contain a feature preventing concurrent use of the same License Key or JetBrains Account; or
(iv) use Software for any commercial purpose.

5. LICENSE TO DISTRIBUTE REDISTRIBUTABLE

In addition to the license granted under Section 4 of this Agreement, Licensor grants to Licensee a non-exclusive, limited license to use the files located in the "redist" folder in Software installation under the terms of the Apache License, Version 2.0. Licensee may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed in writing, software distributed under the Apache License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License.

6. USE OF DECOMPILER

(a) Software includes decompiling functionality ("JetBrains Decompiler") that enables reproducing source code from the original binary code. Licensee acknowledges that binary code and source code might be protected by copyright and trademark laws. Before using JetBrains Decompiler, Licensee should make sure that decompilation of binary code is not prohibited by the applicable license agreement (except to the extent that Licensee may be expressly permitted under applicable law) or that Licensee has obtained permission to decompile the binary code from the copyright owner.
(b) Using JetBrains Decompiler is entirely optional. Licensor neither encourages nor condones the use of JetBrains Decompiler, and disclaims any liability for Licensee's use of JetBrains Decompiler in violation of applicable laws.

7. THIRD PARTY SOFTWARE LICENSE

(a) Licensee agrees to comply with the terms and conditions contained in Third-Party Software license agreements with respect to the applicable Third-Party Software.
(b) Licensee agrees and acknowledges that Sections 11 and 12 of this Agreement shall also govern Licensee's use of the Third-Party Software. Licensor will bear no responsibility with respect to any Third Party Software, and Licensee will look solely to the licensor(s) of the Third Party Software for any remedy. Licensor claims no right in the Third Party Software, and the same is owned exclusively by the licensor(s) of the Third Party Software.
(c) LICENSOR PROVIDES NO WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT, WITH RESPECT TO ANY THIRD PARTY SOFTWARE.

8. RESTRICTED USE DURING EVALUATION PERIOD

(a) Subject to the terms of this Agreement, Licensee is granted a right to use Software for evaluation purposes without charge for a period of thirty (30) days from the date of installation of Software unless otherwise specified ("Evaluation Period").
(b) Licensee's use of Software during Evaluation Period shall be limited to the internal evaluation of Software for the sole purpose of determining whether Software meets Licensee's requirements and whether Licensee desires to continue using Software.
(c) Upon expiration of Evaluation Period, Licensee must obtain License Certificate for perpetual use of Software or cease using Software. Software contains a feature that will automatically disable Software upon expiration of Evaluation Period. Licensee may not disable, destroy, or remove this feature of Software, and any attempt to do so will be in violation of this Agreement and will terminate Licensee's rights to use Software.

9. LICENSE FEES AND PAYMENTS

Licensee agrees to the terms and conditions of Software purchase published on Licensor's website at www.jetbrains.com. Licensee will pay to Licensor the license fee and other charges and expenses as set forth in an appropriate invoice or other purchase documentation. Licensor may charge Licensee interest for any payment that is more than thirty (30) days past due at the rate of one and one-half percent (1.5%) per month or the highest amount allowed by law, whichever is lower.

10. UPGRADES

(a) Licensor will provide generally available new versions of Software to Licensee pursuant to the upgrade subscription terms published on Licensor's web site at www.jetbrains.com.
(b) Licensee will qualify for free upgrades during the initial 1-year upgrade subscription term. Licensee may renew an upgrade subscription for another 1-year period by paying to Licensor an applicable upgrade subscription renewal fee. Each subsequent upgrade subscription term will start on the day following the expiration of a previous upgrade subscription term regardless of the actual upgrade subscription renewal date. Upon obtaining License Key for a new upgrade subscription term from Licensor, Licensee shall destroy a License Key provided by Licensor for a previous upgrade subscription term.
(c) If not agreed otherwise in writing between Licensor and Licensee, upon upgrading to new version of Software the relationship between parties shall be governed and amended (if applicable) by the terms and conditions of License agreement related to Software available at www.jetbrains.com on the day of upgrade purchase.

11. LIMITED WARRANTY

SOFTWARE IS PROVIDED TO LICENSEE "AS IS" AND WITHOUT WARRANTIES. LICENSOR MAKES NO WARRANTY AS TO ITS USE OR PERFORMANCE. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR AND ITS AFFILIATES, SUPPLIERS AND RESELLERS DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT, WITH REGARD TO SOFTWARE, AND THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES.

12. DISCLAIMER OF DAMAGES

(a) TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR OR ITS AFFILIATES, LICENSORS, SUPPLIERS OR RESELLERS BE LIABLE TO LICENSEE UNDER ANY THEORY FOR ANY DAMAGES SUFFERED BY LICENSEE OR ANY USER OF SOFTWARE, OR FOR ANY SPECIAL, INCIDENTAL, INDIRECT, CONSEQUENTIAL, OR SIMILAR DAMAGES (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY, FOR FAILURE TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) ARISING OUT OF THE USE OR INABILITY TO USE SOFTWARE, OR THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED.
(b) IN ANY CASE, LICENSOR'S ENTIRE LIABILITY UNDER ANY PROVISION OF THIS AGREEMENT WILL BE LIMITED TO THE AMOUNT ACTUALLY PAID BY LICENSEE FOR SOFTWARE UNDER THIS AGREEMENT.

13. EXPORT REGULATIONS

Licensee agrees and accepts that Software may be subject to import and export laws of any country, including those of the European Union and United States (specifically the Export Administration Regulations (EAR)). Licensee acknowledges that it is not a citizen, national, or resident of, and is not under control of the governments of Cuba, Iran, North Korea, Sudan or Syria and is not otherwise a restricted end-user as defined by applicable export control laws. Further, Licensee acknowledges that it will not download or otherwise export or re-export Software or any related technical data directly or indirectly to the above-mentioned countries or to citizens, nationals, or residents of those countries, or to any other restricted end user or for any restricted end-use.

14. TERM AND TERMINATION

(a) Except as otherwise provided in License Certificate, the license granted herein shall be perpetual.
(b) If Licensee fails to comply with the terms and conditions of this Agreement, this Agreement and Licensee's right and license to use Software will terminate immediately. Licensee may terminate this Agreement at any time by notifying Licensor. Upon the termination of this Agreement, Licensee must cease using Software and delete Software from its Clients and archives.
(c) LICENSEE AGREES THAT UPON TERMINATION OF THIS AGREEMENT FOR ANY REASON, LICENSOR MAY TAKE ACTIONS SO THAT SOFTWARE NO LONGER OPERATES.

15. MARKETING

Licensee agrees to be identified as a customer of Licensor and that Licensor may refer to Licensee by name, trade name and trademark, if applicable, and may briefly describe Licensee's business in Licensor's marketing materials, on Licensor's web site, in public or legal documents. Licensee hereby grants Licensor a license to use Licensee's name and any of Licensee's trade names and trademarks solely pursuant to this marketing section.

16. GENERAL

(a) Licensor reserves the right at any time to cease the support of Software and to alter prices, features, specifications, capabilities, functions, licensing terms, release dates, general availability or other characteristics of Software.
(b) This Agreement, including the Third Party Software license agreements, constitutes the entire agreement between the parties concerning Licensee's use of Software, and supersedes any and all prior or contemporaneous oral or written representations, communications, or advertising with respect to Software. No purchase order, other ordering document or any hand written or typewritten text which purports to modify or supplement the printed text of this Agreement or any schedule will add to or vary the terms of this Agreement unless signed by both Licensee and Licensor.
(c) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach. The provisions of this Agreement which require or contemplate performance after the expiration or termination of this Agreement will be enforceable notwithstanding said expiration or termination.
(d) This Agreement will be governed by the laws of Czech Republic, without reference to conflict of laws principles. Licensee agrees that any litigation relating to this Agreement may only be brought in, and will be subject to the jurisdiction of, any Court of Czech Republic.
(e) Titles are inserted for convenience only and will not affect in any way the meaning or interpretation of this Agreement. If any provision of this Agreement is held invalid, the remainder of this Agreement will continue in full force and effect. Either Licensor or Licensee may assign this Agreement in the case of a merger or sale of substantially all of its respective assets to another entity. This Agreement will be binding upon and will inure to the benefit of the parties, their successors and assigns.

For exceptions or modifications to this Agreement, please contact Licensor at:

Address: Na hrebenech II 1718/10, Prague, 14700, Czech Republic
Fax: +420 241 722 540
E-mail: sales@jetbrains.com
