
ODESK TEAM LICENSE AGREEMENT

This License Agreement is a legal agreement between the User (an
individual or an entity) and oDesk Corp. for (a) the Software Product
identified above, which includes computer software and electronic
documentation, and (b) the Service provided by oDesk web-site and web
services. The User should carefully read the following terms and
conditions before using the Software Product. 

The Software Product is licensed, not sold. The Software Product is
protected by copyright laws and international copyright treaties, as well as
other intellectual property laws and treaties. By installing, copying, or
otherwise using the Software Product, the User is agreeing to be bound
by the terms of this Agreement. If the User does not agree to the terms
of this Agreement, the User is not authorized to use the Software
Product or the Service. 

1. GRANT OF LICENSE. oDesk grants the User the non-exclusive right to
install and use the Software Product on a computer system. The Software
Product can only be used in conjunction with an oDesk Team Online
Account with a valid license to access the Service. 

2. ACCESS TO DATA. Subject to the terms of this Agreement, the User
grants to oDesk the non-exclusive, worldwide, right to use, copy, store,
transmit and display data submitted by the User to the Service (User
Data or Content) solely to the extent necessary to provide the Service as
requested by User. All User Data shall remain the sole property of
User, unless specifically notified in advance. User, not oDesk,
shall have sole responsibility for the accuracy, quality, integrity,
legality, reliability, appropriateness and copyright of all User Data
and oDesk shall not be responsible or liable for the deletion, correction,
destruction, damage, loss or failure to store any Data. oDesk will not
monitor, edit, or disclose the contents of a user's collected data, except
that you agree that oDesk may do so: (a) if required by law; (b) to comply
with legal process; (c) to enforce this Agreement and any applicable
Guidelines, Rules, or Service-specific Terms of Service; (d) to respond to
claims that any Content violates the rights of third-parties; or (e) to
protect the rights, property, or personal safety of oDesk, its employees,
users and the public. oDesk may remove or disclose collected data on the
Service for the same reasons.

3. PRIVACY. oDesk's privacy statement may be viewed at
http://team.odesk.com/html/privacy_statement.html. oDesk reserves the right
to modify its privacy and security policies in its reasonable discretion
from time to time.

4. RESTRICTIONS. (A) The User must comply with all applicable laws
regarding the use of the Software Product and the Service. (B) The User
may not reverse engineer, decompile, or disassemble the Software Product or
the Service, or access the Service in order to build a competitive product
or service or copy any ideas, features, functions or graphics of the
Software Product or the Service.  (C) The User may not rent or lease the
Software Product or copy, license, sell, transfer, make available,
distribute, or assign this license or the Content to any third-party.  (D)
The User may not distribute copies of the activated Software Product to
third parties. (E) The User is permitted to store, manipulate, analyze,
reformat, print, and display the Content only for his internal business use.
Unauthorized use, resale or commercial exploitation of the Software Product,
the Service and/or the Content in any way is expressly prohibited. (F) The
User shall not create Internet "links" to the Service or "frame" or
"mirror" any Content contained on, or accessible from, the Service on any
other server or Internet-based device. (G) The User accepts oDesk's
right to audit the User compliance with this agreement by monitoring
computer and product usage.

5. TERMINATION. oDesk may terminate this license agreement if the User
fails to comply with the terms and conditions of this license agreement. In
such event, the User must destroy all copies of the Software Product. 

6. NO WARRANTY. Any use of the Software Product is at the User's own
risk. To the maximum extent permitted by applicable law, oDesk and its
suppliers disclaim all warranties and conditions, either express or implied,
including, but not limited to, implied warranties of merchantability,
fitness for a particular purpose, and non-infringement.

7. NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted
by applicable law, in no event shall oDesk or its suppliers be liable for
any special, incidental, indirect, or consequential damages whatsoever
(including, without limitation, damages for loss of business profits,
business interruption, loss of business information, or any other pecuniary
loss) arising out of the use of or inability to use the Software Product,
even if oDesk has been advised of the possibility of such damages. 

8. LIMITATION OF LIABILITY. oDesk's entire liability and the User's
exclusive remedy under this License Agreement shall not exceed the
User's purchase price. 

9. LOCAL LAWS AND EXPORT CONTROL. This Software Product is subject to United
States export controls administered by the U.S. Department of Commerce, the
United States Department of Treasury Office of Foreign Assets Control, and
other U.S. agencies and the export control regulations of the European
Union. The User acknowledges and agrees that the Software Product shall
not be used, and none of the underlying information, software, or technology
may be transferred or otherwise exported or re-exported to Afghanistan,
Burma, Cuba, Iraq, Iran, Libya, Sudan, or any other countries to which the
United States and/or the European Union maintains an embargo (collectively,
"Embargoed Countries"), or to or by a national or resident thereof, or any
person or entity on the U.S. Department of Treasury's List of Specially
Designated Nationals or the U.S. Department of Commerce's Table of Denial
Orders (collectively, "Designated Nationals"). The lists of Embargoed
Countries and Designated Nationals are subject to change without notice. By
using this Software Product, the User represents and warrants that it is
not located in, under the control of, or a national or resident of an
Embargoed Country or Designated National. The User agrees to comply
strictly with all U.S. and European Union export laws and assumes sole
responsibility for obtaining licenses to export or re-export as may be
required. This Software Product may use encryption technology that is
subject to licensing requirements under the U.S. Export Administration
Regulations, 15 C.F.R. Parts 730-774 and Council Regulation (EC) No.
1334/2000

oDesk and its licensors make no representation that the Service is
appropriate or available for use in other locations. If User uses the
Service from outside the United States of America and/or the European Union,
User is solely responsible for compliance with all applicable laws,
including without limitation export and import regulations of other
countries. Any diversion of the Content contrary to United States or
European Union (including European Union Member States) law is prohibited.
None of the Content, nor any information acquired through the use of the
Service, is or will be used for nuclear activities, chemical or biological
weapons, or missile projects, unless specifically authorized by the United
States Government or appropriate European body for such purposes. 

Contact Information

If you have questions regarding this License Agreement, please contact our
User Support by email at support@odesk.com, by telephone at (650) 853-4100,
fax at (650) 853-4101 or postal mail at oDesk Corporation, oDesk Corporation
4200 Bohannon Drive Menlo Park, CA 94025 U.S.A.

