ABySS
Copyright 2009 Genome Sciences Centre
All rights reserved.

Abyss SOFTWARE LICENSE AGREEMENT (ACADEMIC USE)
CAREFULLY READ THE FOLLOWING TERMS AND CONDITIONS. This License
Agreement (the "Agreement") is a legal contract between you, your
employer, educational institution or organization (collectively, "You")
and the British Columbia Cancer Agency ("BCCA") with respect to the
license of ABySS, including all associated
documentation (collectively, the "Product"). 

BCCA is willing to license the Product to You only if You accept the
terms and conditions of this Agreement. By clicking on the "I ACCEPT"
button, or by copying, downloading, accessing or otherwise using the
Product, You automatically agree to be bound by the terms of this
Agreement. IF YOU DO NOT WISH TO BE BOUND BY THE TERMS OF THIS
AGREEMENT, DO NOT COPY, DOWNLOAD, ACCESS OR OTHERWISE USE THE
PRODUCT. 

1. AUTHORITY: In the event that You are an educational institution or
   organization, Your representative who is clicking the "I ACCEPT"
   button, or otherwise copying, downloading, accessing or using the
   Product hereby, in their personal capacity, represents and warrants
   that they possess the legal authority to enter into this Agreement
   on Your behalf and to bind You to the terms of this Agreement. 

2. LICENSE TO USE: BCCA hereby grants to You a personal,
   non-exclusive, non-transferable, limited license to use the Product
   solely for internal, non-commercial use for non-profit research or
   educational purposes only on the terms and conditions contained in
   this Agreement. The Product may be installed on a maximum of one
   machine per Qualified User at Your premises only. A copy of the
   Product installed on a single common machine may be shared for
   internal use by Qualified Users only. In order to be a "Qualified
   User", an individual must be a student, researcher, professor,
   instructor or staff member of a non-profit educational institution
   or organization who uses the Product solely for non-profit research
   or educational purposes. 

3. RESTRICTIONS: You acknowledge and agree that You shall not, and
shall not authorize any third party to: 
(a) make copies of the Product, except as provided in Section 2 and
except for a single backup copy, and any such copy together with the
original must be kept in Your possession or control; 
(b) modify, adapt, decompile, disassemble, translate into another
computer language, create derivative works of, or otherwise reverse
engineer the Product, or disclose any trade secrets relating to the
Product, except as permitted in Section 5; 
(c) license, sublicense, distribute, sell, lease, transfer, assign,
trade, rent or publish the Product or any part thereof and/or copies
thereof, to any third party; 
(d) use the Product to process any data other than Your own; 
(e) use the Product or any part thereof for any commercial or
for-profit purpose or any other purpose other than as permitted in
Section 2; or 
(f) use, without its express permission, the name of BCCA. 

4. INTELLECTUAL PROPERTY RIGHTS: Subject to Section 5 below, all
   patents, copyrights, trade secrets, service marks, trademarks and
   other proprietary rights in or related to the Product and any
   improvements, modifications and enhancements thereof are and will
   remain the exclusive property of BCCA or its licensors. You agree
   that You will not, either during or after the termination of this
   Agreement, contest or challenge the title to or the intellectual
   property rights of BCCA or its licensors in the Product or any
   portion thereof. 

5. OWNERSHIP OF IMPROVEMENTS: In the event that the Product, in the
   form provided to You, includes source code (the "Source Code"),
   You are entitled to make improvements, modifications and
   enhancements to the Source Code (collectively, "Improvements")
   which Improvements are to be used by You for non-profit research
   and educational purposes only and You shall be the owner of those
   Improvements that You directly make and of all intellectual
   property rights to such Improvements, subject to the foregoing
   limits on Your use and distribution of such Improvements. You
   hereby grant to BCCA a perpetual, non-exclusive, worldwide,
   fully-paid, irrevocable license to use such Improvements for any
   purposes whatsoever, and to sublicense such Improvements including
   the right for third parties to sublicense the same, in perpetuity
   to the extent such rights are not limited in duration under
   applicable law, without identifying or seeking Your
   consent. Notwithstanding the foregoing, You acknowledge that BCCA
   and its licensors will retain or own all rights in and to any
   pre-existing code or other technology, content and data that may be
   incorporated in the Improvements. For greater certainty, this
   Section applies solely to the Source Code and shall not give You
   any rights with respect to the object code or any other portion or
   format of the Product which use, for greater certainty, is limited
   as set forth in this Agreement including as set out in Section 3(b)
   above. You acknowledge and agree that you will provide copies of
   Improvements to BCCA in such format as reasonably requested by BCCA
   at any time upon the request of BCCA. 

6. CONFIDENTIALITY: You acknowledge that the Product is and
   incorporates confidential and proprietary information developed,
   acquired by or licensed to BCCA. You will take all reasonable
   precautions necessary to safeguard the confidentiality of the
   Product, and will not disclose any information about the Product to
   any other person without BCCA's prior written consent. You will
   not allow the removal or defacement of any confidential or
   proprietary notice placed on the Product. You acknowledge that any
   breach of this Section 6 will cause irreparable harm to BCCA and
   its licensors. 

7. NO WARRANTIES: THIS PRODUCT IS PROVIDED TO YOU BY BCCA IN ORDER TO
ALLOW YOU TO OBTAIN ACCESS TO LEADING ACADEMIC RESEARCH. THE PRODUCT
IS PROVIDED TO YOU ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY
KIND. NO WARRANTY, REPRESENTATION OR CONDITION EITHER EXPRESS OR
IMPLIED, INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTY OR
CONDITION OF MERCHANTABILITY, NON-INFRINGEMENT, PERFORMANCE,
DURABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE SHALL
APPLY. BCCA DOES NOT WARRANT THAT THE PRODUCT WILL OPERATE ON A
CONTINUOUS OR TROUBLE FREE BASIS. 

8. LIMITATION OF LIABILITY: TO THE MAXIMUM EXTENT PERMITTED BY
APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF BCCA TO
YOU EXCEED THE AMOUNT YOU HAVE PAID TO ACQUIRE THE PRODUCT ("MAXIMUM
AMOUNT") AND WHERE YOU HAVE NOT PAID ANY AMOUNT FOR THE PRODUCT THEN
THE MAXIMUM AMOUNT SHALL BE DEEMED TO BE CDN$100.00. IN NO EVENT SHALL
BCCA BE LIABLE FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, OR SPECIAL
DAMAGES, INCLUDING WITHOUT LIMITATION ANY DAMAGES FOR LOST PROFITS OR
SAVINGS, REGARDLESS OF WHETHER THEY HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. EXCEPT TO THE EXTENT THAT THE LAWS OF A
COMPETENT JURISDICTION REQUIRE LIABILITIES BEYOND AND DESPITE THESE
LIMITATIONS, EXCLUSIONS AND DISCLAIMERS, THESE LIMITATIONS, EXCLUSIONS
AND DISCLAIMERS SHALL APPLY WHETHER AN ACTION, CLAIM OR DEMAND ARISES
FROM A BREACH OF WARRANTY OR CONDITION, BREACH OF CONTRACT,
NEGLIGENCE, STRICT LIABILITY OR ANY OTHER KIND OF CIVIL OR STATUTORY
LIABILITY CONNECTED WITH OR ARISING FROM THIS AGREEMENT. YOU AGREE
THAT THE FOREGOING DISCLAIMER OF WARRANTIES AND LIMITATION OF
LIABILITY ARE FAIR IN LIGHT OF THE NATURE OF THE RIGHTS GRANTED HEREIN
AND THE AMOUNT OF FEES PAID BY YOU IN RESPECT OF THE PRODUCT. 

9. INDEMNITY: You will indemnify, defend and hold harmless BCCA, its
   board of directors, staff and agents from and against any and all
   liability, loss, damage, action, claim or expense (including
   attorney's fees and costs at trial and appellate levels) in
   connection with any claim, suit, action, demand or judgement
   (collectively, "Claim") arising out of, connected with, resulting
   from, or sustained as a result of Your use of the Product or the
   downloading of the Product, including without limitation, any Claim
   relating to infringement of BCCA's intellectual property rights or
   the intellectual property rights of any third party. 

10. SUPPORT AND MAINTENANCE: You acknowledge and agree that, unless
    and to the extent expressly agreed by BCCA in a separate written
    document, the Product is provided to You without any support or
    maintenance from BCCA and, for greater certainty, BCCA shall have
    no obligation to issue any update or upgrade to any Product. 

11. TERM: This Agreement is effective until terminated. You may
    terminate this Agreement at any time by ceasing use of the Product
    and destroying or deleting any copies of the Product. This
    Agreement will terminate immediately without notice from BCCA if
    You fail to comply with any provision of this Agreement. BCCA may
    terminate this Agreement at any time upon notice to you where BCCA
    determines, in its sole discretion, that any continued use of the
    Product could infringe the rights of any third parties. Upon
    termination of this Agreement, and in any event upon BCCA
    delivering You notice of termination, You shall immediately purge
    all Products from Your computer system(s), return to BCCA all
    copies of the Product that are in Your possession or control, and
    cease any further development of any Improvements. On any
    termination of this Agreement Sections 1, 4, 6, 7, 8, 9, 13 and 14
    shall survive such termination. 

12. GOVERNMENT END USERS: Where any of the Product is used, duplicated
    or disclosed by or to the United States government or a government
    contractor or sub contractor, it is provided with RESTRICTED
    RIGHTS as defined in Title 48 CFR 52.227-19 and is subject to the
    following: Title 48 CFR 2.101, 52.227-19, 227.7201 through
    227.7202-4, FAR 52.227-14, and FAR 52.227-19(c)(1-2) and (6/87),
    and where applicable, the customary software license, as described
    in Title 48 CFR 227-7202 with respect to commercial software and
    commercial software documentation including DFAR 252.227-7013,
    DFAR 252,227-7014, DFAR 252.227-7015 and DFAR 252.7018, all as
    applicable. 

13. USE OF THE DOWNLOAD SERVICE: You acknowledge and agree that you
    will be responsible for all costs, charges and taxes (where
    applicable) arising out of Your use of the Product and the
    downloading of the Product. You acknowledge that You are
    responsible for supplying any hardware or software necessary to
    use the Product pursuant to this Agreement. 

14. GENERAL PROVISIONS:
(a) This Agreement will be governed by the laws of the Province of
British Columbia, and the laws of Canada applicable therein, excluding
any rules of private international law that lead to the application of
the laws of any other jurisdiction. The United Nations Convention on
Contracts for the International Sale of Goods (1980) does not apply to
this Agreement. The courts of the Province of British Columbia shall
have non-exclusive jurisdiction to hear any matter arising in
connection with this Agreement. 
(b) USE OF THE PRODUCT IS PROHIBITED IN ANY JURISDICTION WHICH DOES
NOT GIVE EFFECT TO THE TERMS OF THIS AGREEMENT. 
(c) You agree that no joint venture, partnership, employment,
consulting or agency relationship exists between You and BCCA as a
result of this Agreement or Your use of the Product. 
(d) You hereby consent to Your contact information and any other
personally identifiable information that You provide to us being
disclosed to and maintained and used by us and our business partners
for the purposes of (i) managing and developing our respective
businesses and operations; (ii) marketing products and services to You
and your staff; and (iii) developing new and enhancing existing
products. You further agree that we may provide this information to
other persons as required to satisfy any legal requirements and to any
person that acquires some or all of the assets of BCCA. Where any of
the personally identifiable information that You provide to us is in
respect of individuals other than Yourself (such as Your staff) then
You represent and warrant to use that You have obtained all necessary
consents and authorizations from such individuals in order to comply
with this provision. Please see the BCCA website for further
information regarding personally identifiable information. 
(e) This Agreement is the entire Agreement between You and BCCA
relating to this subject matter. You will not contest the validity of
this Agreement merely because it is in electronic form. No
modification of this Agreement will be binding, unless in writing and
accepted by an authorized representative of each party.  
(f) The provisions of this Agreement are severable in that if any
provision in the Agreement is determined to be invalid or
unenforceable under any controlling body of law, that will not affect
the validity or enforceability of the remaining provisions of the
Agreement. 
(g) You agree to print out or download a copy of this Agreement and
retain it for Your records. 
(h) You consent to the use of the English language in this Agreement. 
(i) You may not assign this Agreement or any of Your rights or
obligations hereunder without BCCA's prior written consent. BCCA, at
its sole discretion may assign this Agreement without notice to You. 
