IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING.
Do not copy, install, or use the Materials provided under this license agreement ("Agreement"), until you have carefully read the following terms and conditions.

By copying, installing, or otherwise using the Materials, you agree to be bound by the terms of this Agreement.  If you do not agree to the terms of this Agreement, do not copy, install, or use the Materials.

End User License Agreement for the Intel(R) Software Development Products

1. LICENSE DEFINITIONS: 

A. "Materials" are defined as the software, documentation, license key codes and other materials, including any updates and upgrade thereto, for the applicable Intel Software Development Product (which may be found at http://www.intel.com/software/products/), that are provided to you under this Agreement.  Materials also include the Redistributables as defined below.

B. "Redistributables" are the files listed in the following text files that may be included in the Materials for the applicable Intel Software Development Product: clredist.txt, credist.txt, fredist.txt, redist.txt:

C.  "Cluster OpenMP Library", is comprised of the files listed in the "clredist.txt" file specified above, is the Intel(R) Cluster OpenMP Library add-on option to the Intel(R) C++ Compiler for Linux* and Intel(R) Fortran Compiler for Linux* products ("Intel Compiler for Linux").  The use of the Cluster OpenMP Library is conditioned on having a valid license from Intel for the Cluster OpenMP Library  and for either Intel Compiler for Linux, and further is governed by the terms and conditions of the license agreement for applicable the Intel Compiler for Linux.

D. "Source Code" is defined as the Materials provided in human readable format, whether unmodified or modified by you.  

E. "Sample Source" is the Source Code file(s) that: (i) demonstrate certain limited functions included in the binary libraries of the Intel(R) Integrated Performance Primitives ("Intel(R) IPPs"); (ii) are identified as Intel IPP sample source code; and (iii) are obtained separately from Intel after you register your copy of the Intel Integrated Performance Primitives product with Intel.

2. LICENSE GRANT:

A. Subject to all of the terms and conditions of this Agreement, Intel Corporation ("Intel") grants to you a non-exclusive, non-assignable, copyright license to use the Materials. 

B. Subject to all of the terms and conditions of this Agreement, Intel grants to you a non-exclusive, non-assignable copyright license to modify the Materials, or any portions thereof, that are (i) provided in Source Code form or, (ii) are defined as Redistributables and are provided in text form.

C. Subject to all of the terms and conditions of this Agreement, Intel grants to you a non-exclusive, non-assignable copyright license to distribute (except under an Evaluation License as specified below) the Redistributables, or any portions thereof, as part of the product or application you developed using the Materials.  If such application is a software development library, then attribution, as specified in the product release notes of the corresponding Materials, shall be displayed prominently in that application's product documentation and on the application's product web site.

3. LICENSE RESTRICTIONS:

A. If you receive your first copy of the Materials electronically, and a second copy on media, then you may use the second copy only in accordance with your applicable license stated in this Agreement, or for backup or archival purposes.  You may not provide the second copy to another user.

B. You may NOT:  (i) use or copy the Materials except as provided in this Agreement; (ii) rent or lease the Materials to any third party; (iii) assign this Agreement or transfer the Materials without the express written consent of Intel; (iv) modify, adapt, or translate the Materials in whole or in part except as provided in this Agreement; (v) reverse engineer, decompile, or disassemble the Materials; (vi) attempt to modify or tamper with the normal function of a license manager that regulates usage of the Materials; (vii) distribute, sublicense or transfer the Source Code form of any components of the Materials, Redistributables and Sample Source and derivatives thereof to any third party except as provided in this Agreement; or (viii) distribute Redistributables except as part of a larger program that adds significant primary functionality different from that of the Redistributables.

C. The scope and duration (time period) of your license depends on the type of license you obtained from Intel.  The variety of license types are set forth below, which may not be available for all "Intel(R) Software Development Products" and therefore may not apply to the Materials.  For more information on the types of licenses, please contact Intel or your sales representative.

i. EVALUATION LICENSE: If you are using the Materials under the control of an Evaluation license, you as an individual may use the Materials only for internal evaluation purposes and only for the term of the evaluation time period, which is controlled by the license key code for the Materials.  NOTWITHSTANDING ANYTHING TO THE CONTRARY ELSEWHERE IN THIS AGREEMENT, YOU MAY NOT DISTRIBUTE ANY PORTION OF THE MATERIALS, AND THE APPLICATION AND/OR PRODUCT DEVELOPED BY YOU MAY ONLY BE USED FOR EVALUATION PURPOSES AND ONLY FOR THE TERM OF THE EVALUATION PERIOD.  You may install copies of the Materials on an unlimited number of computers provided that you are the only individual using the Materials and only one copy of the Materials is in use at any one time.  A separate license is required for each additional use and/or individual user in all other cases.  Intel will provide you with a license code key that enables the Materials for an Evaluation license.  If you are an entity, Intel grants you the right to designate one individual within your organization to have the sole right to use the Materials in the manner provided above.

ii. NONCOMMERCIAL-USE LICENSE:  If you are using the Materials under the control of a Noncommercial-Use license, you as an individual may use the Materials only for non-business use where you receive no fee, salary or any other form of compensation.  The Materials may not be used for any other purpose, whether "for profit" or "not for profit."  Any work performed or produced as a result of use of the Materials cannot be performed or produced for the benefit of other parties for a fee, compensation or any other reimbursement or remuneration.  You may install copies of the Materials on an unlimited number of computers provided that you are the only individual using the Materials and only one copy of the Materials is in use at any one time.  A separate license is required for each additional use and/or individual user in all other cases.  Intel will provide you with a license code key that enables the Materials for a Noncommercial-Use license.  If you obtained a time-limited Noncommercial-Use license, the duration (time period) of your license and your ability to use the Materials is limited to the time period of the obtained license, which is controlled by the license key code for the Materials.  If you are an entity, Intel grants you the right to designate one individual within your organization to have the sole right to use the Materials in the manner provided above.

iii. SINGLE-USER LICENSE: If you are using the Materials under the control of a Single-User license, you as an individual may install and use the Materials on an unlimited number of computers provided that you are the only individual using the Materials and only one copy of the Materials is in use at any one time.  A separate license is required for each additional use and/or individual user in all other cases.  Intel will provide you with a license code key that enables the Materials for a Single-User license.  If you obtained a time-limited Single-User license, the duration (time period) of your license and your ability to use the Materials is limited to the time period of the obtained license, which is controlled by the license key code for the Materials.  If you are an entity, Intel grants you the right to designate one individual within your organization to have the sole right to use the Materials in the manner provided above.

iv. NODE-LOCKED LICENSE: If you are using the Materials under the control of a Node-Locked license, you may use the Materials only on a single designated computer by no more than the authorized number of concurrent users.  A separate license is required for each additional concurrent user and/or computer in all other cases.  Intel will provide you with a license code key that enables the Materials for a Node-Locked license up to the authorized number of concurrent users.  If you obtained a time-limited Node-Locked license, the duration (time period) of your license and your ability to use the Materials is limited to the time period of the obtained license, which is controlled by the license key code for the Materials.

v. FLOATING LICENSE: If you are using the Materials under the control of a Floating license, you may (a) install the Materials on an unlimited number of computers that are connected to the designated network and (b) use the Material by no more than the authorized number of concurrent users.  A separate license is required for each additional concurrent user and/or network on which the Materials are used.  Intel will provide you with a license code key that enables the Materials for a Floating license up to the authorized number of concurrent users.  If you obtained a time-limited Floating license, the duration (time period) of your license and your ability to use the Materials is limited to the time period of the obtained license, which is controlled by the license key code for the Materials.  Intel Library Floating License: If the Materials are the Intel(R) Math Kernel Library or the Intel(R) Integrated Performance Primitives Library or the Intel(R) Threading Building Blocks (either "Intel Library"), then the Intel Library is provided to you as an add-on option to either the Intel(R) C++ Compiler product or the Intel(R) Fortran Compiler product (either "Intel Compiler") for which you have a Floating license, and as such, in addition to the terms and conditions above, the Intel Library may only be used by the authorized concurrent users of that Intel Compiler Floating license.

vi. CLUSTER SYSTEM LICENSE: If you are using the Materials under the control of a Cluster System license, (a) you may install the Materials on an unlimited number of computers provided that all such computers are part of a single cluster system and (b) if you are an entity you must designate from within your organization individuals, up to and not exceeding the authorized number of users, to have the sole right to use the Materials, and you must limit the use of the Materials to only those designated individuals.  A separate license is required for (c) each additional cluster system on which the Materials are used, and (d) each additional designated individual user exceeding the authorized number of users.  Intel will provide you with a license code key that enables the Materials for a Cluster System license up to the authorized number of individual uses/users.  If you obtained a time-limited Cluster System license, the duration (time period) of your license and your ability to use the Materials is limited to the time period of the obtained license, which is specified in the Materials and/or controlled by the license key code for the Materials.

D. DISTRIBUTION:  Distribution of the Materials is also subject to the following limitations:  You (i) shall be solely responsible to your customers for any update or support obligation or other liability which may arise from the distribution, (ii) shall not make any statement that your product is "certified", or that its performance is guaranteed, by Intel, (iii) shall not use Intel's name or trademarks to market your product without written permission, (iv) shall prohibit disassembly and reverse engineering, (v) shall not publish reviews of Materials designated as beta without written permission by Intel, and (vi) shall indemnify, hold harmless, and defend Intel and its suppliers from and against any claims or lawsuits, including attorney's fees, that arise or result from your distribution of any product.

E. Intel(R) Integrated Performance Primitives (Intel IPP). The following terms and conditions apply only to the Intel IPP.

i. Licensee's use or implementation of the Intel IPP Materials may require additional licenses, including but not limited to copyright and patent licenses from various entities.  Should any such additional copyright, patent or other licenses be required, Licensee agrees to obtain any such licenses at Licensee's own expense.  Licensee is solely responsible for obtaining any such licenses and the copyright licenses granted in herein are conditioned on Licensee obtaining such additional licenses.

ii. Notwithstanding anything herein to the contrary, a valid license to Intel IPP is a prerequisite to any license for Sample Source, and possession of Sample Source does not grant any license to Intel IPP (or any portion thereof).  To access Sample Source, you must first register your licensed copy of the Intel IPP with Intel.  By downloading, installing or copying any Sample Source file, you agree to be bound by terms of this Agreement.

F. SOFTWARE TRANSFER: You may permanently transfer all of your rights under this Agreement only with Intel's prior written permission.

4. COPYRIGHT: Title to the Materials and all copies thereof remain with Intel or its suppliers.  The Materials are copyrighted and are protected by United States copyright laws and international treaty provisions.  You will not remove any copyright notice from the Materials.  You agree to prevent any unauthorized copying of the Materials.  Except as expressly provided herein, no license or right is granted to you directly or by implication, inducement, estoppel or otherwise, specifically Intel does not grant any express or implied right to you under Intel patents, copyrights, trademarks, or trade secret information.

5. NO WARRANTY AND LIMITED REPLACEMENT:  THE MATERIALS AND INFORMATION ARE PROVIDED "AS IS" WITH NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS, OR ANY WARRANTY OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE.  If the media on which the Materials are furnished are found to be defective in material or workmanship under normal use for a period of ninety (90) days from the date of receipt, Intel's entire liability and your exclusive remedy shall be the replacement of the media.  This offer is void if the media defect results from accident, abuse, or misapplication.

6. LIMITATION OF LIABILITY: THE ABOVE REPLACEMENT PROVISION IS THE ONLY WARRANTY OF ANY KIND.  INTEL OFFERS NO OTHER WARRANTY EITHER EXPRESS OR IMPLIED INCLUDING THOSE OF MERCHANTABILITY, NONINFRINGEMENT OF THIRD- PARTY INTELLECTUAL PROPERTY OR FITNESS FOR A PARTICULAR PURPOSE. NEITHER INTEL NOR ITS SUPPLIERS SHALL BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  BECAUSE SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.

7. UNAUTHORIZED USE:  THE MATERIALS ARE NOT DESIGNED, INTENDED, OR AUTHORIZED FOR USE IN ANY TYPE OF SYSTEM OR APPLICATION IN WHICH THE FAILURE OF THE MATERIALS COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR (E.G MEDICAL SYSTEMS, LIFE SUSTAINING OR LIFE SAVING SYSTEMS).  Should the buyer purchase or use the Materials for any such unintended or unauthorized use, the buyer shall indemnify and hold Intel and its officers, subsidiaries and affiliates harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of product liability, personal injury or death associated with such unintended or unauthorized use, even if such claim alleges that Intel was negligent regarding the design or manufacture of the part.

8. USER SUBMISSIONS:  You agree that any material, information or other communication you transmit or post to an Intel website or provide to Intel under this Agreement will be considered non-confidential and non-proprietary ("Communications").  Intel will have no obligations with respect to the Communications.  You agree that Intel and its designees will be free to copy, modify, create derivative works, publicly display, disclose, distribute, license and sublicense through multiple tiers of distribution and licensees, incorporate and otherwise use the Communications and all data, images, sounds, text, and other things embodied therein, including derivative works thereto, for any and all commercial or non-commercial purposes. You are prohibited from posting or transmitting to or from an Intel website or provide to Intel any unlawful, threatening, libelous, defamatory, obscene, pornographic, or other material that would violate any law.

9. TERMINATION OF THIS LICENSE: This Agreement becomes effective on the date you accept this Agreement and will continue until terminated as provided for in this Agreement.  If you are using the Materials under the control of a time-limited license, for example an Evaluation License, this Agreement terminates without notice on the last day of the time period, which is controlled by the license key code for the Materials.  Intel may terminate this license at any time if you are in breach of any of its terms and conditions.  Upon termination, you will immediately return to Intel or destroy the Materials and all copies thereof.

10. U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED RIGHTS". Use, duplication or disclosure by the Government is subject to restrictions set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.  Use of the Materials by the Government constitutes acknowledgment of Intel's rights in them.

11. APPLICABLE LAWS: Any claim arising under or relating to this Agreement shall be governed by the internal substantive laws of the State of Delaware, without regard to principles of conflict of laws.  You agree that the terms of the United Nations Convention on Contracts for the Sale of Goods do not apply to this Agreement. You agree that your distribution and export/re-export of the Software and permitted modifications shall be in compliance with the laws, regulations, orders or other restrictions of applicable export laws.

* Other names and brands may be claimed as the property of others
