THIS DEVELOPER SOFTWARE LICENSE AGREEMENT (THE "AGREEMENT") IS A LEGALLY
BINDING AGREEMENT BETWEEN Google Inc. ("LICENSOR") AND
YOU OR THE LEGAL ENTITY YOU REPRESENT ("You" or its possessive, "Your"). BY
TYPING "I ACCEPT" WHERE INDICATED YOU ACKNOWLEDGE THAT YOU HAVE READ THIS
AGREEMENT, UNDERSTAND IT AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.
IF YOU DO NOT AGREE TO THESE TERMS YOU MUST DISCONTINUE THE INSTALLATION
PROCESS AND YOU SHALL NOT USE THE SOFTWARE OR RETAIN ANY COPIES OF THE
SOFTWARE OR DOCUMENTATION. ANY USE OR POSSESSION OF THE SOFTWARE BY YOU IS
SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT. IF THE
SOFTWARE IS INSTALLED ON A COMPUTER OWNED BY A CORPORATION OR OTHER LEGAL
ENTITY, THEN YOU REPRESENT AND WARRANT THAT YOU HAVE THE AUTHORITY TO BIND
SUCH ENTITY TO THE TERMS AND CONDITIONS OF THIS AGREEMENT.

   1.  Special Definitions

      a.  The term "Android" means the open source mobile platform, software
          stack, operating system, middleware, application programming
          interfaces and mobile applications under the trade-name "Android"
          distributed at Android.com.

      b.  The term "Android Applications" means a software application or
          open-source contribution developed by You, designed to operate with
          Android that does not contain or incorporate any of the Software.

      c.  The term "Authorized Android Enabled Device" means only the device
          identified on the site from which You downloaded the Software.
          The term "Software" means the Licensor's proprietary software and
          libraries in object code form, designed for use on the Authorized
          Android Enabled Device.

      d.  The term "Authorized Android Enabled Device Software" means a
          packaged build for Authorized Android Enabled Devices, consisting
          of files suitable for installation on an Authorized Android Enabled
          Device using a mechanism such as fastboot mode or recovery mode.

   2.  License Grant

      a.  Subject to the terms of this Agreement, Licensor hereby grants to
          You, free of charge, a non-exclusive, non-sublicensable,
          non-transferable, limited license, during the term of this
          Agreement, to download, install and use the Software internally in
          machine-readable (i.e., object code) form and the Documentation for
          non-commercial use on an Authorized Android Enabled Device and
          non-commercial redistribution of the Authorized Android Enabled
          Device Software (the "Limited Purpose"). You may grant your end
          users the right to use the Software for the Limited Purpose. The
          license to the Software granted to You hereunder is solely for the
          Limited Purpose set forth in this section, and the Software shall
          not be used for any other purpose.

   3.  Restrictions

      a.  Retention of Rights. The entire right, title and interest in the
          Software shall remain with Licensor and, unless specified in
          writing hereunder, no rights are granted to any of the Software.
          Except for the right to use the Software for the Limited Purpose,
          the delivery of the Software to You does not convey to You any
          intellectual property rights in the Software, including, but not
          limited to any rights under any patent, trademark, copyright, or
          trade secret.  Neither the delivery of the Software to You nor any
          terms set forth herein shall be construed to grant to You, either
          expressly, by implication or by way of estoppel, any license under
          any patents or other intellectual property rights covering or
          relating to any other product or invention or any combination of
          the Software with any other product. Any rights not expressly
          granted to You herein are reserved by Licensor.

      b.  No Commercialization or Distribution of the Software and
          Documentation. Except as expressly provided in Section 2 of this
          Agreement, You shall have no right to (i) copy, disclose,
          distribute, publically perform, publically display, transfer,
          alter, modify, translate, disassemble, decompile, reverse engineer,
          or adapt the Software and Documentation, or any portion thereof, or
          create any derivative works based thereon; (ii) rent, lease,
          assign, sublicense, resell, disclose or otherwise transfer the
          Software and Documentation in whole or in part to any third party
          (iii) use the Software and Documentation except for the Limited
          Purpose, (iv) remove or alter any of the copyright or proprietary
          notices contained in any of the Software and Documentation. For the
          purposes of clarity, nothing in this Agreement prohibits You from
          making and distributing Android Applications under commercial or
          non-commercial terms, provided that You shall not contain,
          incorporate, and/or compile the Software or any of its derivative
          works, in whole or in part, into Your Android Applications and/or
          any software/devices created by You or by third parties acting on
          Your behalf. You and any such third party shall comply with all of
          the terms and conditions of this Agreement.

      c.  No Reverse Engineering. Except for any portions of the Software
          provided to You in source code format and except for any third
          party code distributed with the Software that is licensed under
          contrary terms, You will not reverse engineer, disassemble,
          decompile, or translate the Software, or otherwise attempt to
          derive the source code version of the Software, except if and to
          the extent expressly permitted under any applicable law.

      d.  Third Party Software. You agree that Android may contain third
          party software. You agree that you may not distribute such third
          party software for any purpose without appropriate licenses from
          the applicable third party or parties.

      e.  No Transfer or Assignment. You shall not assign any of its rights
          or obligations under this Agreement. Any attempted assignment in
          contravention of this Section shall be void.

   4.  Indemnity

      a.  You agree to indemnify and hold harmless Licensor and its officers,
          directors, customers, employees and successors and assigns (each an
          "Indemnified Party") against any and all claims, demands, causes of
          action, losses, liabilities, damages, costs and expenses, incurred
          by the Indemnified Party (including but not limited to costs of
          defense, investigation and reasonable attorney's fees) arising out
          of, resulting from or related to (i) any software, products,
          documentation, content, materials or derivative works created or
          developed by You using the Software which causes an infringement of
          any patent, copyright, trademark, trade secret, or other property,
          publicity or privacy rights of any third parties arising in any
          jurisdiction anywhere in the world, (ii) the download,
          distribution, installation, storage, execution, use or transfer of
          such software, products, documentation, content, materials or
          derivative works by any person or entity, and/or (iii) any breach
          of this Agreement by You. If requested by an Indemnified Party, You
          agree to defend such Indemnified Party 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.

   5.  Limitation of Liability

      a.  TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAWS, UNDER NO
          CIRCUMSTANCES, INCLUDING WITHOUT LIMITATION NEGLIGENCE, SHALL
          LICENSOR, ITS AFFILIATES AND/OR ITS DIRECTORS, OFFICERS,
          EMPLOYEES OR AGENTS BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
          SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT
          LIMITED TO DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
          INTERRUPTION, LOSS OF BUSINESS INFORMATION AND THE LIKE) ARISING
          OUT OF OR IN CONNECTION WITH THE SOFTWARE OR ANY DOWNLOAD,
          INSTALLATION OR USE OF, OR INABILITY TO USE, THE SOFTWARE, EVEN IF
          LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
          DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR
          EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES SO
          THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY OR MAY BE LIMITED.
          IN NO EVENT SHALL LICENSOR'S TOTAL AGGREGATE LIABILITY TO YOU FOR
          ANY AND ALL DAMAGES, LOSSES, CLAIMS AND CAUSES OF ACTIONS (WHETHER
          IN CONTRACT, TORT, INCLUDING NEGLIGENCE, INDEMNIFICATION OR
          OTHERWISE) EXCEED ONE HUNDRED U.S. DOLLARS (US$100). THE
          LIMITATIONS SET FORTH IN THIS PARAGRAPH SHALL BE DEEMED TO APPLY TO
          THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. THE PARTIES HAVE
          FULLY CONSIDERED THE FOREGOING ALLOCATION OF RISK AND FIND IT
          REASONABLE, AND THAT THE FOREGOING LIMITATIONS IN THIS PARAGRAPH
          ARE AN ESSENTIAL BASIS OF THE BARGAIN BETWEEN THE PARTIES.

   6.  No Warranty

      a.  LICENSOR MAKES NO WARRANTIES, EXPRESS OR IMPLIED, WITH
          RESPECT TO THE SOFTWARE AND 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 A
          WARRANTY OR REPRESENTATION BY LICENSOR (I) AS TO THE VALIDITY OR
          SCOPE OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT
          AND (II) 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. Licensor SHALL NOT HAVE ANY OBLIGATION TO
          PROVIDE ANY TECHNICAL SUPPORT OF THE SOFTWARE UNDER THIS AGREEMENT.

   7.  Term and Termination

      a.  This Agreement shall be effective on the date You accept this
          Agreement and shall remain in effect until terminated as provided
          herein. You may terminate the Agreement at any time by deleting and
          destroying all copies of the Software 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, Licensor may at
          any time terminate this Agreement, without cause, upon notice to
          You. Upon termination You must delete or destroy all copies of the
          Software in Your possession, and the license granted to You in this
          Agreement shall terminate. Sections 3, 4, 5, 6 and 8 shall survive
          the termination of this Agreement.

   8.  Miscellaneous

      a.  Governing Law. This Agreement is governed and interpreted in
          accordance with the laws of the State of California without giving
          effect to its conflict of laws provisions. The United Nations
          Convention on Contracts for the International Sale of Goods is
          expressly disclaimed and shall not apply. Any claim arising out of
          or related to this Agreement must be brought exclusively in a
          federal or state court located in Santa Clara County, California
          and You consent to the jurisdiction and venue of such courts.

      b.  Waiver and Severability. The failure of either party to require
          performance by the other party of any provision of this Agreement
          shall not affect the full right to require such performance at any
          time thereafter; nor shall the waiver by either party of a breach
          of any provision of this Agreement be taken or held to be a waiver
          of the provision itself. Severability. If any provision of this
          Agreement is unenforceable or invalid under any applicable law or
          is so held by applicable court decision, such unenforceability or
          invalidity shall not render this Agreement unenforceable or invalid
          as a whole, and such provision shall be changed and interpreted so
          as to best accomplish the objectives of such unenforceable or
          invalid provision within the limits of applicable law or
          applicable court decisions.

      c.  Amendment and Modification. This Agreement and any of its terms and
          provisions may only be amended, modified, supplemented or waived in
          a writing signed by both parties hereto.

      d.  Compliance with Laws. You shall comply with all applicable laws,
          rules, and regulations in connection with its activities under this
          Agreement.

      e.  Entire Agreement. This Agreement completely and exclusively states
          the agreement between You and Licensor regarding this subject
          matter.
