Open Government Licence - Canada

You are encouraged to use the Information that is available under this licence with only a few conditions.

Using Information under this licence
* Use of any Information indicates your acceptance of the terms below.
* The Information Provider grants you a worldwide, royalty-free, perpetual, non-exclusive licence to use the Information, including for commercial purposes, subject to the terms below.

You are free to:
* Copy, modify, publish, translate, adapt, distribute or otherwise use the Information in any medium, mode or format for any lawful purpose.

You must, where you do any of the above:
* Acknowledge the source of the Information by including any attribution statement specified by the Information Provider(s) and, where possible, provide a link to this licence.
* If the Information Provider does not provide a specific attribution statement, or if you are using Information from several information providers and multiple attributions are not practical for your product or application, you must use the following attribution statement:
     Contains information licensed under the Open Government Licence – Canada.

The terms of this licence are important, and if you fail to comply with any of them, the rights granted to you under this licence, or any similar licence granted by the Information Provider, will end automatically.

Exemptions
This licence does not grant you any right to use:
* Personal Information;
* third party rights the Information Provider is not authorized to license;
* the names, crests, logos, or other official symbols of the Information Provider; and
* Information subject to other intellectual property rights, including patents, trade-marks and official marks.

Non-endorsement
This licence does not grant you any right to use the Information in a way that suggests any official status or that the Information Provider endorses you or your use of the Information.

No Warranty
The Information is licensed “as is”, and the Information Provider excludes all representations, warranties, obligations, and liabilities, whether express or implied, to the maximum extent permitted by law.

The Information Provider is not liable for any errors or omissions in the Information, and will not under any circumstances be liable for any direct, indirect, special, incidental, consequential, or other loss, injury or damage caused by its use or otherwise arising in connection with this licence or the Information, even if specifically advised of the possibility of such loss, injury or damage.

Governing Law
This licence is governed by the laws of the province of Ontario and the applicable laws of Canada.

Legal proceedings related to this licence may only be brought in the courts of Ontario or the Federal Court of Canada.

Definitions
In this licence, the terms below have the following meanings:

"Information" means information resources protected by copyright or other information that is offered for use under the terms of this licence.

"Information Provider" means Her Majesty the Queen in right of Canada.

“Personal Information” means “personal information” as defined in section 3 of the Privacy Act, R.S.C. 1985, c. P-21.

"You" means the natural or legal person, or body of persons corporate or incorporate, acquiring rights under this licence.

Versioning
This is version 2.0 of the Open Government Licence – Canada. The Information Provider may make changes to the terms of this licence from time to time and issue a new version of the licence. Your use of the Information will be governed by the terms of the licence in force as of the date you accessed the information.
