Linux Android Board Support Package vLA.BR.1.2.4-01810-8x16.0-2
PLEASE READ THIS LICENSE AGREEMENT (“AGREEMENT”) CAREFULLY.  THIS AGREEMENT IS A BINDING LEGAL AGREEMENT ENTERED INTO BY AND BETWEEN YOU (OR IF YOU ARE ENTERING INTO THIS AGREEMENT ON BEHALF OF AN ENTITY, THEN THE ENTITY THAT YOU REPRESENT) AND QUALCOMM TECHNOLOGIES, INC. (“QTI” “WE” “OUR” OR “US”).  THIS IS THE AGREEMENT THAT APPLIES TO YOUR USE OF THE DESIGNATED AND/OR LINKED APPLICATIONS, THE ENCLOSED QUALCOMM TECHNOLOGIES’ MATERIALS, INCLUDING RELATED DOCUMENTATION AND ANY UPDATES OR IMPROVEMENTS THEREOF (COLLECTIVELY, “MATERIALS”).  BY USING OR COMPLETING THE INSTALLATION OF THE MATERIALS, YOU ARE ACCEPTING THIS AGREEMENT AND YOU AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.  IF YOU DO NOT AGREE TO THESE TERMS, QTI IS UNWILLING TO AND DOES NOT LICENSE THE MATERIALS TO YOU. IF YOU DO NOT AGREE TO THESE TERMS YOU MUST DISCONTINUE THE INSTALLATION PROCESS AND YOU MAY NOT USE THE MATERIALS OR RETAIN ANY COPIES OF THE MATERIALS. ANY USE OR POSSESSION OF THE MATERIALS BY YOU IS SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT. 

1. RIGHT TO USE DELIVERABLES; RESTRICTIONS.

1.1 License.  Subject to the terms and conditions of this Agreement, including, without limitation, the restrictions, conditions, limitations and exclusions set forth in this Agreement, QTI hereby grants to you a nonexclusive, limited license under QTI’s copyrights to: (i) install and use the Materials; and (ii) to reproduce and redistribute the binary code portions of the Materials (the “Redistributable Binary Code”).  You may make and use a reasonable number of copies of any documentation.

1.2 Redistribution Restrictions.  Distribution of the Redistributable Binary Code is subject to the following restrictions: (i) Redistributable Binary Code may only be distributed in binary format and may not be distributed in source code format: (ii) Redistributable Binary Code may not be distributed on a stand alone basis but may be redistributed in conjunction with and as a part of a software application created by you; (iii)  the Redistributable Binary Code may only operate in conjunction with platforms incorporating Qualcomm Technologies, Inc. chipsets; (iv) redistribution of the Redistributable Binary Code must include the .txt file setting forth the terms and condition of this Agreement; (v) you may not use Qualcomm Technologies’ or its affiliates or subsidiaries name, logo or trademarks; and (vi) copyright, trademark, patent and any other notices that appear on the Materials may not be removed or obscured.

1.3 Additional Restrictions.  Except as expressly permitted by this Agreement, you shall have no right to sublicense, transfer or otherwise disclose the Materials to any third party.  You shall not reverse engineer, reverse assemble, reverse translate, decompile or reduce to source code form any portion of the Materials provided in object code form or executable form.  Except for the purposes expressly permitted in this Agreement, You shall not use the Materials for any other purpose.  QTI (or its licensors) shall retain title and all ownership rights in and to the Materials and any alterations, modifications (including all derivative works), translations or adaptations made of the Materials, and all copies thereof, and nothing herein shall be deemed to grant any right to You under any of QTI's or its affiliates’ patents.  You shall not subject the Materials to any third party license terms (e.g., open source license terms).  You shall not use the Materials for the purpose of identifying or providing evidence to support any potential patent infringement claim against QTI, its affiliates, or any of QTI’s or QTI’s affiliates’ suppliers and/or direct or indirect customers.  QTI hereby reserves all rights not expressly granted herein.

1.4 Third Party Software and Materials.  The Software may contain or link to certain software and/or materials that are written or owned by third parties.  Such third party code and materials may be licensed under separate or different terms and conditions and are not licensed to you under the terms of this Agreement.  You agree to comply with all terms and conditions imposed on you in the applicable third party licenses.  Such terms and conditions may impose certain obligations on you as a condition to the permitted use of such third party code and materials.  QTI does not represent or warrant that such third party licensors have or will continue to license or make available their code and materials to you.

1.5 Feedback.  QTI may from time to time receive suggestions, feedback or other information from You regarding the Materials.  Any suggestions, feedback or other disclosures received from You are and shall be entirely voluntary on the part of You.  Notwithstanding any other term in this Agreement, QTI shall be free to use suggestions, feedback or other information received from You, without obligation of any kind to You.  The Parties agree that all inventions, product improvements, and modifications conceived of or made by QTI that are based, either in whole or in part, on ideas, feedback, suggestions, or recommended improvements received from You are the exclusive property of QTI, and all right, title and interest in and to any such inventions, product improvements, and modifications will vest solely in QTI.

1.6 No Technical Support.  QTI is under no obligation to provide any form of technical support for the Materials, and if QTI, in its sole discretion, chooses to provide any form of support or information relating to the Materials, such support and information shall be deemed confidential and proprietary to QTI.

2. WARRANTY DISCLAIMER.  YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT THE USE OF THE MATERIALS IS AT YOUR SOLE RISK.  THE MATERIALS AND TECHNICAL SUPPORT, IF ANY, ARE PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED.  QTI ITS LICENSORS AND AFFILIATES MAKE NO WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE MATERIALS OR ANY OTHER INFORMATION OR DOCUMENTATION PROVIDED UNDER THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR ANY EXPRESS OR IMPLIED WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE OF DEALING OR COURSE OF PERFORMANCE.  NOTHING CONTAINED IN THIS AGREEMENT SHALL BE CONSTRUED AS (I) A WARRANTY OR REPRESENTATION BY QTI, ITS LICENSORS OR AFFILIATES AS TO THE VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT OR (II) A WARRANTY OR REPRESENTATION BY QTI THAT ANY MANUFACTURE OR USE WILL BE FREE FROM INFRINGEMENT OF PATENTS, COPYRIGHTS OR OTHER INTELLECTUAL PROPERTY RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE RESPONSIBILITY OF YOU TO MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT TO THE ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY OF THIRD PARTIES.

3. NO OTHER LICENSES OR INTELLECTUAL PROPERTY RIGHTS. Neither this Agreement, nor any act by QTI or any of its affiliates pursuant to this Agreement or relating to the Materials (including, without limitation, the provision by QTI or its affiliates of the Materials), shall provide to You any license or any other rights whatsoever under any patents, trademarks, trade secrets, copyrights or any other intellectual property of QTI or any of its affiliates, except for the copyright rights expressly licensed under this Agreement. You understand and agree that:

                  (i) Neither this Agreement, nor delivery of the Materials, grants any right to practice, or any other right at all with respect to, any patent of QTI or any of its affiliates; and

                  (ii) A separate license agreement from QUALCOMM Incorporated is needed to use or practice any patent of QUALCOMM Incorporated. You agree not to contend in any context that, as a result of the provision or use of the Materials, either QTI or any of its affiliates has any obligation to extend, or You or any other party has obtained any right to, any license, whether express or implied, with respect to any patent of QTI or any of its affiliates for any purpose.                  

4. TERMINATION.  This Agreement shall be effective upon acceptance, or access or use of the Materials (whichever occurs first) by You and shall continue until terminated. You may terminate the Agreement at any time by deleting and destroying all copies of the Materials and all related information in Your possession or control. This Agreement terminates immediately and automatically, with or without notice, if You fail to comply with any provision hereof. Additionally, QTI may at any time terminate this Agreement, without cause, upon notice to You. Upon termination You must, to the extent possible, delete or destroy all copies of the Materials in Your possession and the license granted to You in this Agreement shall terminate. Sections 1.2 through 10 shall survive the termination of this Agreement. In the event that any restrictions, conditions, limitations are found to be either invalid or unenforceable, the rights granted to You in Section 1 (License) shall be null, void and ineffective from the Effective Date, and QTI shall also have the right to terminate this Agreement immediately, and with retroactive effect to the effective date.

5. LIMITATION OF LIABILITY.  IN NO EVENT SHALL QTI, QTI’s AFFILIATES OR ITS LICENSORS BE LIABLE TO YOU FOR ANY INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, INCLUDING BUT NOT LIMITED TO ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL DAMAGES, ARISING OUT OF THE USE OR INABILITY TO USE, OR THE DELIVERY OR FAILURE TO DELIVER, ANY OF THE DELIVERABLES, or any breach of any obligation under this agreement, EVEN IF QTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  THE FOREGOING LIMITATION OF LIABILITY SHALL REMAIN IN FULL FORCE AND EFFECT REGARDLESS OF WHETHER YOUR REMEDIES HEREUNDER ARE DETERMINED TO HAVE FAILED OF THEIR ESSENTIAL PURPOSE.  THE ENTIRE LIABILITY OF QTI, QTI’s AFFILIATES AND ITS LICENSORS, AND THE SOLE AND EXCLUSIVE REMEDY OF YOU, FOR ANY CLAIM OR CAUSE OF ACTION ARISING HEREUNDER (WHETHER IN CONTRACT, TORT, OR OTHERWISE) SHALL NOT EXCEED US$500.

6. INDEMNIFICATION.  You agree to indemnify and hold harmless QTI and its officers, directors, employees and successors and assigns against any and all third party claims, demands, causes of action, losses, liabilities, damages, costs and expenses, incurred by QTI (including but not limited to costs of defense, investigation and reasonable attorney’s fees) arising out of, resulting from or related to: (i) any breach of this Agreement by You; and (ii) your acts, omissions, products and services.  If requested by QTI, You agree to defend QTI in connection with any third party claims, demands, or causes of action resulting from, arising out of or in connection with any of the foregoing.

7. ASSIGNMENT.  You shall not assign this Agreement or any right or interest under this Agreement, nor delegate any obligation to be performed under this Agreement, without QTI’s prior written consent.  For purposes of this Section 7, an “assignment” by You under this Section shall be deemed to include, without limitation, any merger, consolidation, sale of all or substantially all of its assets, or any substantial change in the management or control of You.  Any attempted assignment in contravention of this Section 9 shall be void.  QTI may freely assign this Agreement or delegate any or all of its rights and obligations hereunder to any third party.

8. COMPLIANCE WITH LAWS; APPLICABLE LAW.  You agree to comply with all applicable local, international and national laws and regulations and with U.S. Export Administration Regulations, as they apply to the subject matter of this Agreement.  This Agreement is governed by the laws of the State of California, excluding California’s choice of law rules.

9. CONTRACTING PARTIES.  If the Materials are downloaded on any computer owned by a corporation or other legal entity, then this Agreement is formed by and between QTI and such entity.  The individual accepting the terms of this Agreement represents and warrants to QTI that they have the authority to bind such entity to the terms and conditions of this Agreement.

10. MISCELLANEOUS PROVISIONS.  This Agreement, together with all exhibits attached hereto, which are incorporated herein by this reference, constitutes the entire agreement between QTI and You and supersedes all prior negotiations, representations and agreements between the parties with respect to the subject matter hereof.  No addition or modification of this Agreement shall be effective unless made in writing and signed by the respective representatives of QTI and You.  The restrictions, limitations, exclusions and conditions set forth in this Agreement shall apply even if QTI or any of its affiliates becomes aware of or fails to act in a manner to address any violation or failure to comply therewith.  You hereby acknowledge and agree that the restrictions, limitations, conditions and exclusions imposed in this Agreement on the rights granted in this Agreement are not a derogation of the benefits of such rights.  You further acknowledges that, in the absence of such restrictions, limitations, conditions and exclusions, QTI would not have entered into this Agreement with You.  Each party shall be responsible for and shall bear its own expenses in connection with this Agreement.  If any of the provisions of this Agreement are determined to be invalid, illegal, or otherwise unenforceable, the remaining provisions shall remain in full force and effect.  This Agreement is entered into solely in the English language, and if for any reason any other language version is prepared by any party, it shall be solely for convenience and the English version shall govern and control all aspects.  If You are located in the province of Quebec, Canada, the following applies: The Parties hereby confirm they have requested this Agreement and all related documents be prepared in English. 

