
Nokia Open Source License (NOKOS
License) Version 1.0a
 1. DEFINITIONS.

"Affiliates" of a party shall mean an entity

a) which is directly or indirectly controlling such party;

b) which is under the same direct or indirect ownership or control
as such party; or

c) which is directly or indirectly owned or controlled by such party.

For these purposes, an entity shall be treated as being controlled
by another if that other entity has fifty percent (50%) or more of the
votes in such entity, is able to direct its affairs and/or to control the
composition of its board of directors or equivalent body.

"Commercial Use" shall mean distribution or otherwise making
the Covered Software available to a third party.

``Contributor`` shall mean each entity that creates or contributes
to the creation of Modifications.

``Contributor Version`` shall mean in case of any Contributor
the combination of the Original Software, prior Modifications used by a
Contributor, and the Modifications made by that particular Contributor 
and in case of Nokia in addition the Original Software in any form, including
the form as Exceutable.

``Covered Software`` shall mean the Original Software or Modifications
or the combination of the Original Software and Modifications, in each
case including portions thereof.

``Electronic Distribution Mechanism`` shall mean a mechanism
generally accepted in the software development community for the electronic
transfer of data.

``Executable`` shall mean Covered Software in any form other
than Source Code.

``Nokia`` shall mean Nokia Corporation and its Affiliates.

``Larger Work`` shall mean a work, which combines Covered Software
or portions thereof with code not governed by the terms of this License.

``License`` shall mean this document.

"Licensable" shall mean having the right to grant, to the maximum
extent possible, whether at the time of the initial grant or subsequently
acquired, any and all of the rights conveyed herein.

``Modifications`` shall mean any addition to or deletion from
the substance or structure of either the Original Software or any previous
Modifications. When Covered Software is released as a series of files,
a Modification is:

a) Any addition to or deletion from the contents of a file containing
Original Software or previous Modifications.

b) Any new file that contains any part of the Original Software or
previous Modifications.

``Original Software`` shall mean the Source Code of computer
software code which is described in the Source Code notice required by
Exhibit A as Original Software, and which, at the time of its release under
this License is not already Covered Software governed by this License.

"Patent Claims" shall mean any patent claim(s), now owned
or hereafter acquired, including without limitation, method, process, and
apparatus claims, in any patent Licensable by grantor.

``Source Code`` shall mean the preferred form of the Covered
Software for making modifications to it, including all modules it contains,
plus any associated interface definition files, scripts used to control
compilation and installation of an Executable, or source code differential
comparisons against either the Original Software or another well known,
available Covered Software of the Contributor`s choice. The Source Code
can be in a compressed or archival form, provided the appropriate decompression
or de-archiving software is widely available for no charge.

"You`` (or "Your") shall mean an individual or a legal
entity exercising rights under, and complying with all of the terms of,
this License or a future version of this License issued under Section 6.1.
For legal entities, "You`` includes Affiliates of such entity.

2. SOURCE CODE LICENSE.

2.1 Nokia Grant.

Subject to the terms of this License, Nokia hereby grants You a world-wide,
royalty-free, non-exclusive license, subject to third party intellectual
property claims:

a) under copyrights Licensable by Nokia to use, reproduce, modify,
display, perform, sublicense and distribute the Original Software (or portions
thereof) with or without Modifications, and/or as part of a Larger Work;

b) and under Patents Claims necessarily infringed by the making, using
or selling of Original Software, to make, have made, use, practice, sell,
and offer for sale, and/or otherwise dispose of the Original Software (or
portions thereof).

c) The licenses granted in this Section 2.1(a) and (b) are effective
on the date Nokia first distributes Original Software under the terms of
this License.

d) Notwithstanding Section 2.1(b) above, no patent license is granted:
1) for code that You delete from the Original Software; 2) separate from
the Original Software; or 3) for infringements caused by: i) the modification
of the Original Software or ii) the combination of the Original Software
with other software or devices.

2.2 Contributor Grant.

Subject to the terms of this License and subject to third party intellectual
property claims, each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license

a) under copyrights Licensable by Contributor, to use, reproduce, modify,
display, perform, sublicense and distribute the Modifications created by
such Contributor (or portions thereof) either on an unmodified basis, with
other Modifications, as Covered Software and/or as part of a Larger Work;
and

b) under Patent Claims necessarily infringed by the making, using,
or selling of Modifications made by that Contributor either alone and/or
in combination with its Contributor Version (or portions of such combination),
to make, use, sell, offer for sale, have made, and/or otherwise dispose
of: 1) Modifications made by that Contributor (or portions thereof); and
2) the combination of Modifications made by that Contributor with its Contributor
Version (or portions of such combination).

c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective
on the date Contributor first makes Commercial Use of the Covered Software.

d) Notwithstanding Section 2.2(b) above, no patent license is granted:
1) for any code that Contributor has deleted from the Contributor Version;
2) separate from the Contributor Version; 3) for infringements caused by:
i) third party modifications of Contributor Version or ii) the combination
of Modifications made by that Contributor with other software (except as
part of the Contributor Version) or other devices; or 4) under Patent Claims
infringed by Covered Software in the absence of Modifications made by that
Contributor.

3. DISTRIBUTION OBLIGATIONS.

3.1 Application of License.


The Modifications which You create or to which You contribute are governed
by the terms of this License, including without limitation Section 2.2.
The Source Code version of Covered Software may be distributed only under
the terms of this License or a future version of this License released
under Section 6.1, and You must include a copy of this License with every
copy of the Source Code You distribute. You may not offer or impose any
terms on any Source Code version that alters or restricts the applicable
version of this License or the recipients` rights hereunder. However, You
may include an additional document offering the additional rights described
in Section 3.5.

3.2 Availability of Source Code.

Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License either
on the same media as an Executable version or via an accepted Electronic
Distribution Mechanism to anyone to whom you made an Executable version
available; and if made available via Electronic Distribution Mechanism,
must remain available for at least twelve (12) months after the date it
initially became available, or at least six (6) months after a subsequent
version of that particular Modification has been made available to such
recipients. You are responsible for ensuring that the Source Code version
remains available even if the Electronic Distribution Mechanism is maintained
by a third party.

3.3 Description of Modifications.

You must cause all Covered Software to which You contribute to contain
a file documenting the changes You made to create that Covered Software
and the date of any change. You must include a prominent statement that
the Modification is derived, directly or indirectly, from Original Software
provided by Nokia and including the name of Nokia in (a) the Source Code,
and (b) in any notice in an Executable version or related documentation
in which You describe the origin or ownership of the Covered Software.

3.4  Intellectual Property Matters

(a) Third Party Claims.

If Contributor has knowledge that a license under a third party`s intellectual
property rights is required to exercise the rights granted by such Contributor
under Sections 2.1 or 2.2, Contributor must include a text file with the
Source Code distribution titled "LEGAL`` which describes the claim and
the party making the claim in sufficient detail that a recipient will know
whom to contact. If Contributor obtains such knowledge after the Modification
is made available as described in Section 3.2, Contributor shall promptly
modify the LEGAL file in all copies Contributor makes available thereafter
and shall take other steps (such as notifying appropriate mailing lists
or newsgroups) reasonably calculated to inform those who received the Covered
Software that new knowledge has been obtained.

(b) Contributor APIs.

If Contributor`s Modifications include an application programming interface
and Contributor has knowledge of patent licenses which are reasonably necessary
to implement that API, Contributor must also include this information in
the LEGAL file.

(c) Representations.

Contributor represents that, except as disclosed pursuant to Section
3.4(a) above, Contributor believes that Contributor`s Modifications are
Contributor`s original creation(s) and/or Contributor has sufficient rights
to grant the rights conveyed by this License.

3.5 Required Notices.

You must duplicate the notice in Exhibit A in each file of the Source
Code. If it is not possible to put such notice in a particular Source Code
file due to its structure, then You must include such notice in a location
(such as a relevant directory) where a user would be likely to look for
such a notice. If You created one or more Modification(s) You may add your
name as a Contributor to the notice described in Exhibit A. You must also
duplicate this License in any documentation for the Source Code where You
describe recipients` rights or ownership rights relating to Covered Software.
You may choose to offer, and to charge a fee for, warranty, support, indemnity
or liability obligations to one or more recipients of Covered Software.
However, You may do so only on Your own behalf, and not on behalf of Nokia
or any Contributor. You must make it absolutely clear that any such warranty,
support, indemnity or liability obligation is offered by You alone, and
You hereby agree to indemnify Nokia and every Contributor for any liability
incurred by Nokia or such Contributor as a result of warranty, support,
indemnity or liability terms You offer.

3.6 Distribution of Executable Versions.

You may distribute Covered Software in Executable form only if the
requirements of Section 3.1-3.5 have been met for that Covered Software,
and if You include a notice stating that the Source Code version of the
Covered Software is available under the terms of this License, including
a description of how and where You have fulfilled the obligations of Section
3.2. The notice must be conspicuously included in any notice in an Executable
version, related documentation or collateral in which You describe recipients`
rights relating to the Covered Software. You may distribute the Executable
version of Covered Software or ownership rights under a license of Your
choice, which may contain terms different from this License, provided that
You are in compliance with the terms of this License and that the license
for the Executable version does not attempt to limit or alter the recipient`s
rights in the Source Code version from the rights set forth in this License.
If You distribute the Executable version under a different license You
must make it absolutely clear that any terms which differ from this License
are offered by You alone, not by Nokia or any Contributor. You hereby agree
to indemnify Nokia and every Contributor for any liability incurred by
Nokia or such Contributor as a result of any such terms You offer.

3.7 Larger Works.

You may create a Larger Work by combining Covered Software with other
software not governed by the terms of this License and distribute the Larger
Work as a single product. In such a case, You must make sure the requirements
of this License are fulfilled for the Covered Software.

4. INABILITY TO COMPLY DUE TO STATUTE OR REGULATION.

If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to statute,
judicial order, or regulation then You must: (a) comply with the terms
of this License to the maximum extent possible; and (b) describe the limitations
and the code they affect. Such description must be included in the LEGAL
file described in Section 3.4 and must be included with all distributions
of the Source Code.

Except to the extent prohibited by statute or regulation, such description
must be sufficiently detailed for a recipient of ordinary skill to be able
to understand it.

5. APPLICATION OF THIS LICENSE.

This License applies to code to which Nokia has attached the notice
in Exhibit A and to related Covered Software.

6. VERSIONS OF THE LICENSE.


6.1 New Versions.

Nokia may publish revised and/or new versions of the License from time
to time. Each version will be given a distinguishing version number.

6.2 Effect of New Versions.

Once Covered Software has been published under a particular version
of the License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Software under the terms
of any subsequent version of the License published by Nokia. No one other
than Nokia has the right to modify the terms applicable to Covered Software
created under this License.

7. DISCLAIMER OF WARRANTY.

COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS`` BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT
LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE,
FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE
QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT NOKIA, ITS LICENSORS
OR AFFILIATES OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF  WARRANTY CONSTITUTES
AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED
HEREUNDER EXCEPT UNDER THIS DISCLAIMER.

8. TERMINATION.

8.1 This License and the rights granted hereunder will terminate automatically
if You fail to comply with terms herein and fail to cure such breach within
30 days of becoming aware of the breach. All sublicenses to the Covered
Software which are properly granted shall survive any termination of this
License. Provisions which, by their nature, must remain in effect beyond
the termination of this License shall survive.

8.2 If You initiate litigation by asserting a patent infringement claim
(excluding declatory judgment actions) against Nokia or a Contributor (Nokia
or Contributor against whom You file such action is referred to as "Participant")
alleging that:

a) such Participant`s Contributor Version directly or indirectly infringes
any patent, then any and all rights granted by such Participant to You
under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice
from Participant terminate prospectively, unless if within 60 days after
receipt of notice You either: (i) agree in writing to pay Participant a
mutually agreeable reasonable royalty for Your past and future use of Modifications
made by such Participant, or (ii) withdraw Your litigation claim with respect
to the Contributor Version against such Participant. If within 60 days
of notice, a reasonable royalty and payment arrangement are not mutually
agreed upon in writing by the parties or the litigation claim is not withdrawn,
the rights granted by Participant to You under Sections 2.1 and/or 2.2
automatically terminate at the expiration of the 60 day notice period specified
above.

b) any software, hardware, or device, other than such Participant`s
Contributor Version, directly or indirectly infringes any patent, then
any rights granted to You by such Participant under Sections 2.1(b) and
2.2(b) are revoked effective as of the date You first made, used, sold,
distributed, or had made, Modifications made by that Participant.

8.3 If You assert a patent infringement claim against Participant alleging
that such Participant`s Contributor Version directly or indirectly infringes
any patent where such claim is resolved (such as by license or settlement)
prior to the initiation of patent infringement litigation, then the reasonable
value of the licenses granted by such Participant under Sections 2.1 or
2.2 shall be taken into account in determining the amount or value of any
payment or license.

8.4 In the event of termination under Sections 8.1 or 8.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or any distributor hereunder prior to
termination shall survive termination.

9. LIMITATION OF LIABILITY.

UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING
NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, NOKIA, ANY OTHER CONTRIBUTOR,
OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH
PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL,
OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION,
DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION,
OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL
HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION
OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
RESULTING FROM SUCH PARTY`S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS
SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION
OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, BUT MAY ALLOW LIABILITY TO BE LIMITED;
IN SUCH CASES, A PARTY`s, ITS EMPLOYEES, LICENSORS OR AFFILIATES` LIABILITY
SHALL BE LIMITED TO U.S. $50. Nothing contained in this License shall prejudice
the statutory rights of any party dealing as a consumer.

10. MISCELLANEOUS.

This License represents the complete agreement concerning subject matter
hereof. All rights in the Covered Software not expressly granted under
this License are reserved. Nothing in this License shall grant You any
rights to use any of the trademarks of Nokia or any of its Affiliates,
even if any of such trademarks are included in any part of Covered Software
and/or documentation to it.

This License is governed by the laws of Finland excluding its conflict-of-law
provisions. All disputes arising from or relating to this Agreement shall
be settled by a single arbitrator appointed by the Central Chamber of Commerce
of Finland. The arbitration procedure shall take place in Helsinki, Finland
in the English language. If any part of this Agreement is found void and
unenforceable, it will not affect the validity of the balance of the Agreement,
which shall remain valid and enforceable according to its terms.

11. RESPONSIBILITY FOR CLAIMS.

As between Nokia and the Contributors, each party is responsible for
claims and damages arising, directly or indirectly, out of its utilization
of rights under this License and You agree to work with Nokia and Contributors
to distribute such responsibility on an equitable basis. Nothing herein
is intended or shall be deemed to constitute any admission of liability.

 

EXHIBIT A

The contents of this file are subject to the NOKOS License Version 1.0
(the "License"); you may not use this file except in compliance with the
License.

Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF  ANY KIND, either express or implied. See
the License for the specific language governing rights and limitations
under the License.

The Original Software is

______________________________________.

Copyright &#169; <year> Nokia and others. All Rights Reserved.

Contributor(s): ______________________________________.

